天天看點

sed

sed是一種支援正規表達式的非交流式編輯器stream editor

sed的常用選項

-n     隻顯示比對處理的行(否則會輸出所有)

-e     執行多個編輯指令時(一般用 ; 代替)

-i      直接在檔案中進行修改,而不是輸出到螢幕

-r     支援擴充正規表達式

-f      從腳本檔案中讀取内容并執行(檔案中的編輯指令每行一個,不用 ; 隔開)

sed的常用編輯指令

p      列印比對行

d      删除指定行

a      在比對行後面追加

i       在比對行前面插入

c      整行替換

r      将檔案的内容讀入

w     将文本寫入檔案

s      字元串替換(比對正規表達式)

sed的p指令示例

sed -n '/模式/p'   輸入檔案

這裡的模式可以是正規表達式也可以是精确字元

模式用/括起,擴充正則要加-r選項

示例:sed -n '$p' /etc/passwd   顯示最後1行

        sed -n '3,10!p' /etc/passwd    顯示除了3-10行的内容

        df -h |sed -n '/\/$/p'   顯示以/結尾的行

        a=/dev/shm

        sed -rn "s|$a|yy|; /yy/p" /etc/fstab

sed的d指令示例

删除操作可以根據行号和模式比對進行操作

示例:sed '3,5d' /etc/fstab

        sed '/2/d' /etc/fstab

        sed -r '/^$|^#/d' /etc/fstab

        sed -e '/^$/d' -e '/^#/d' /etc/inittab

sed的a指令示例

追加操作可以根據行号和模式比對進行操作

示例:sed '1a 111111' passwd         在第一行後面追加後面的字元串

        sed '/root/a 111111' passwd

sed的i指令示例

插入操作可以根據行号和模式比對進行操作

示例:sed '/defaults/i 111111' fstab

sed的c指令示例

更改整行操作可以根據行号和模式比對進行操作

示例:sed '/id:/c id:5:initdefault:' /etc/inittab     将id:所在行整行替換成後面的字元串

sed的r指令示例

讀入操作可以根據行号和模式比對進行操作

示例:sed '$r /etc/hosts' /etc/fstab            在fstab檔案的末尾後面讀入hosts檔案的内容

sed的s指令文法格式

sed -n [行号或模式]s/查找内容/替換内容/[替換标記]   檔案

替換操作可以根據行号和模式比對進行操作

替換标記有4種:

數字:替換每行的第幾個

g:全局替換,否則隻替換第一個字元串。ng從第n個開始替換

p:顯示被執行替換操作的行和-n合用

w:将執行替換操作的行輸出到指定檔案

i:不區分大小寫

示例:sed -n "1,10s/^#//p" /etc/passwd      将注釋行的#去掉

        sed -n "1,10s/$/?/p" /etc/passwd        在每行末尾加上?

sed的s指令可以使用任意分隔符作為定界符

sed -n '/^hello/s|/bin/bash|/sbin/nologin|p' /etc/passwd 

sed指令疑難問題

$ sed -ir '/^h+/a 1111' /etc/sysconfig/network

$ cat /etc/sysconfig/network

networking=yes

hostname=yy.sxjy.com

$ ls network

network          networking/      networkr         network-scripts/

注意:-ir選項不會追加成功,會生成一個-r檔案

$ sed -ri '/^h+/a 1111' /etc/sysconfig/network

1111

注意:-ri選項會追加成功,不會生成另一個檔案         是以要将r選項放在前面

sed指令中包含變量

有變量一定要用""

sed的指令中取反操作   !

sed的指令中&的用法

&用于表示替換指令中的比對模式

echo "i have a fat cat" |sed 's/.at/".at"/g'

i have a ".at" ".at"

$ echo "i have a fat cat" |sed 's/.at/"&"/g'

i have a "fat" "cat"

sed -rn 's/\<[0-9]{3}\>/&0/gp' passwd         将所有3位數字後面加個0

sed的s指令中支援\t\n

sed -n 's/^xixi/\n 1111/p' passwd

sed 's/^abrt.*/&\n/' passwd

sed的指令中标簽的用法

标簽:sed使用圓括号定義替換模式中的部分字元

标簽可以友善在後面引用,每行指令最多使用9個标簽