歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 在線編輯器sed簡單用法

在線編輯器sed簡單用法

日期:2017/2/28 16:12:00   编辑:Linux教程

sed是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成後,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容並沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等。以下介紹的是Gnu版本的Sed 3.02。
sed用法:

sed [options] [functions]
選項[options]:

-n : 使用安靜(silent)模式,不在屏幕上顯示出來
-e : 允許多個sed處理語句,直接大指令列模式上進行sed動作
-f : 你可以將sed的動作寫在一個檔案內,-f filename則可以執行裡面的sed動作
-r : 讓sed的動作支持的是延伸型正則表達式的語法
-i : 直接修改讀取的檔案內容,而不是由屏幕輸出
動作說明: [n1[,n2]]fuction

n1,n2 : 代表選擇進行動作的行數,如 10,20[動作行為]

行為[functions]:

a : 新增, a的後面可以接字符串,字符串會在目前行的下一行顯示
d : 刪除, 因為是刪除,所以d後面通常不接任何數據 ^O^
c : 取代, c的後面可以接字符串,這些字符串可以取代n1,n2之間的行
i : 插入, i的後面可以接字符串,而這些字符串會目前行的上一行顯示
p : 打印, 讓特定的數據顯示,通常p會與參數sed -n一起使用
s : 取代, 可以直接進行取代工作,如 1,20s/old/new/g

范例一: 使用行為 a(新增)

[[email protected] ~]nl /etc/passwd | sed '2a 在第2行後面添加數據'
1 root:x:0:0:root:/root:/bin/bash

2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh

在第2行後面添加數據

范例二:使用行為 d(刪除)

[[email protected] ~]nl /etc/passwd | sed '2,5d'
范例三:使用行為 c(取代行)

[[email protected] ~]nl /etc/passwd | sed '2,5c 在2-5行之間的數據被我取代了'
1 root:x:0:0:root:/root:/bin/bash

在2-5行之間的數據被我取代了

6 games:x:5:60:games:/usr/games:/bin/sh

范例四: 僅列出 /etc/passwd文件內的第 5-7 行

[[email protected] ~]nl /etc/passwd | sed -n '5,7p'
5 sync:x:4:65534:sync:/bin:/bin/sync

6 games:x:5:60:games:/usr/games:/bin/sh

7 man:x:6:12:man:/var/cache/man:/bin/sh

范例五: 使用sed和ifconfig只輸出ip地址

5.1. 首先使用ifconfig eth0[接口名]查看詳細信息

[[email protected] ~]ifconfig eth0
eth0 Link encap:以太網 硬件地址 00:23:ae:68:84:e4

inet 地址:192.168.10.123 廣播:192.168.10.255 掩碼:255.255.255.0

inet6 地址: fe80::223:aeff:fe68:84e4/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 躍點數:1

接收數據包:26597 錯誤:0 丟棄:0 過載:0 幀數:0

發送數據包:17358 錯誤:0 丟棄:0 過載:0 載波:0

碰撞:0 發送隊列長度:1000

接收字節:25801312 (25.8 MB) 發送字節:2114879 (2.1 MB)

中斷:16

5.2. 使用grep進行過濾顯示

[[email protected] ~]ifconfig eth0 | grep 'inet '
inet 地址:192.168.10.123 廣播:192.168.10.255 掩碼:255.255.255.0

5.3. 使用sed正則表達式去前面部分(^.*地址:)

[[email protected] ~]ifconfig eth0 | grep 'inet ' | sed 's/^.*地址://g'
192.168.10.123 廣播:192.168.10.255 掩碼:255.255.255.0

5.4. 使用sed正則表達式去後面部分(廣播.*$)

[[email protected] ~]ifconfig eth0 | grep 'inet ' | sed 's/^.*地址://g' | sed 's/廣播.*$//g'
192.168.10.123

5.5. 使用-e選項

[[email protected] ~]ifconfig eth0 | grep 'inet ' | sed -e 's/^.*地址://g' -e 's/廣播.*$//g'
192.168.10.123

5.6. 使用-f選項(把參數寫到sedfile文件中)

[[email protected] ~]ifconfig eth0 | grep 'inet ' | sed -f sedfile
192.168.10.123

范例六: /etc/manpath.config只要MAN存在的行,但是含有#在內的批注行和空白行不要

[[email protected] ~]cat /etc/manpath.config | grep MAN | sed 's/^#.*//g' | sed '/^$/d'
MANDATORY_MANPATH /usr/man

MANDATORY_MANPATH /usr/share/man

MANDATORY_MANPATH /usr/local/share/man

MANPATH_MAP /bin /usr/share/man

MANPATH_MAP /usr/bin /usr/share/man

MANPATH_MAP /sbin /usr/share/man

MANPATH_MAP /usr/sbin /usr/share/man

MANPATH_MAP /usr/local/bin /usr/local/man

MANPATH_MAP /usr/local/bin /usr/local/share/man

MANPATH_MAP /usr/local/sbin /usr/local/man

MANPATH_MAP /usr/local/sbin /usr/local/share/man

MANPATH_MAP /usr/X11R6/bin /usr/X11R6/man

MANPATH_MAP /usr/bin/X11 /usr/X11R6/man

MANPATH_MAP /usr/games /usr/share/man

MANPATH_MAP /opt/bin /opt/man

MANPATH_MAP /opt/sbin /opt/man

MANDB_MAP /usr/man /var/cache/man/fsstnd

MANDB_MAP /usr/share/man /var/cache/man

MANDB_MAP /usr/local/man /var/cache/man/oldlocal

MANDB_MAP /usr/local/share/man /var/cache/man/local

MANDB_MAP /usr/X11R6/man /var/cache/man/X11R6

MANDB_MAP /opt/man /var/cache/man/opt

Copyright © Linux教程網 All Rights Reserved