1.功能說明
Sed是Stream Editor(流編輯器)縮寫,是操作、過濾和轉換文本內容的強大工具。常用功能有增刪改查,過濾,取行。
[root@gumt ~]#sed --version
sed (GNU sed) 4.2.2
2.語法格式
SYNOPSIS
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
說明:
(1)注意sed和後面的選項之間至少有一個空格。
(2)爲了避免混淆,本文稱呼sed爲sed軟件。sed-commands(sed命令)是sed軟件內置的一些命令選項,爲了和前面的options(選項)區分,故稱爲sed命令。
(3)sed-commands既可以是單個sed命令,也可以是多個sed命令組合。
(4)input-file(輸入文件)是可選項,sed還能夠從標準輸入如管道獲取輸入。
常用選項-[OPTION]:
-n:不輸出模式空間中的內容至屏幕;
-e script, --expression=script:多點編輯
[root@gumt ~]#sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab
/etc/fstab
Created by anaconda on Mon Mar 11 20:02:33 2019
Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos_gumt-root / xfs defaults 0 0
/dev/mapper/centos_gumt-home /home xfs defaults 0 0
/dev/mapper/centos_gumt-swap swap swap defaults 0 0
-f /PATH/TO/SED_SCRIPT_FILE:每一行一個編輯命令
-r, --regexp-extended:支持使用正則表達式
-i[SUFFIX], --in-place[=SUFFIX]:直接編輯源文件
地址定界:
(1)空地址:對全文進行處理
(2)單地址:
#:指定行
/pattern/:被此模式所匹配到的每一行
(3)地址範圍
#,#:
#,+#:
#,/part1/
$:最後一行
(4)步進:~
1~2:所有奇數行
2~2:所有偶數行
編輯命令:
d:刪除
[root@gumt ~]#sed '11,12d' /etc/fstab
#/etc/fstab
#Created by anaconda on Mon Mar 11 20:02:33 2019
#Accessible filesystems, by reference, are maintained under '/dev/disk'
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos_gumt-root / xfs defaults 0 0
UUID=7f9112ef-49d5-44b9-ab48-f78c34d70ee0 /boot xfs defaults 0 0
p:顯示模式空間中的內容
[root@gumt ~]#sed '11,12p' /etc/fstab
#/etc/fstab
#Created by anaconda on Mon Mar 11 20:02:33 2019
#Accessible filesystems, by reference, are maintained under '/dev/disk'
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos_gumt-root / xfs defaults 0 0
UUID=7f9112ef-49d5-44b9-ab48-f78c34d70ee0 /boot xfs defaults 0 0
*/dev/mapper/centosgumt-home /home xfs defaults 0 0
/dev/mapper/centosgumt-home /home xfs defaults 0 0
/dev/mapper/centosgumt-swap swap swap defaults 0 0
/dev/mapper/centosgumt-swap swap swap defaults 0 0
a \text:在行後面追加文本“text”,支持使用\n實現多行追加
[root@gumt ~]#sed '3a \new line' /etc/fstab
#/etc/fstab
** new line**
#Created by anaconda on Mon Mar 11 20:02:33 2019
#Accessible filesystems, by reference, are maintained under '/dev/disk'
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos_gumt-root / xfs defaults 0 0
UUID=7f9112ef-49d5-44b9-ab48-f78c34d70ee0 /boot xfs defaults 0 0
/dev/mapper/centos_gumt-home /home xfs defaults 0 0
/dev/mapper/centos_gumt-swap swap swap defaults 0 0
l \text:在行前面追加文本“text”,支持使用\n實現多行插入
c \text:把匹配的行替換爲此處指定的文本“text”
w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中
[root@gumt ~]#sed '/^[^#]/w /tmp/fstab.bak' /etc/fstab
#/etc/fstab
#Created by anaconda on Mon Mar 11 20:02:33 2019
#Accessible filesystems, by reference, are maintained under '/dev/disk'
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos_gumt-root / xfs defaults 0 0
UUID=7f9112ef-49d5-44b9-ab48-f78c34d70ee0 /boot xfs defaults 0 0
/dev/mapper/centos_gumt-home /home xfs defaults 0 0
/dev/mapper/centos_gumt-swap swap swap defaults 0 0
[root@gumt ~]#cat /tmp/fstab.bak
/dev/mapper/centos_gumt-root / xfs defaults 0 0
UUID=7f9112ef-49d5-44b9-ab48-f78c34d70ee0 /boot xfs defaults 0 0
/dev/mapper/centos_gumt-home /home xfs defaults 0 0
/dev/mapper/centos_gumt-swap swap swap defaults 0 0
r /PATH/TO/SOMEFILE:讀取指定文件的內容至當前文件被莫忽視匹配到的行後面;文件合併
[root@gumt ~]#sed '3r /etc/issue' /etc/fstab
#/etc/fstab
\S
Kernel \r on an \m
#Created by anaconda on Mon Mar 11 20:02:33 2019
#Accessible filesystems, by reference, are maintained under '/dev/disk'
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos_gumt-root / xfs defaults 0 0
UUID=7f9112ef-49d5-44b9-ab48-f78c34d70ee0 /boot xfs defaults 0 0
/dev/mapper/centos_gumt-home /home xfs defaults 0 0
/dev/mapper/centos_gumt-swap swap swap defaults 0 0
= :爲模式空間匹配到的行打印行號
!:條件取反;
地址定界!編輯命令
[root@gumt ~]#sed '/^#/!d' /etc/fstab
#/etc/fstab
#Created by anaconda on Mon Mar 11 20:02:33 2019
#Accessible filesystems, by reference, are maintained under '/dev/disk'
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
s///:查找替換,其分割符課可自行指定
替換標記:
g:全局替換
w:/PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中
p:顯示替換成功的行
3.示例
輸出長度不小於50個字符的行
sed -n '/^.{50}/p'
統計文件中有每個單詞出現了多少次
sed 's/ /\n/g' file | sort | uniq -c
查找目錄中的py文件,刪掉所有行級註釋
find ./ -name "*.py" | xargs sed -i.bak '/^[ ]*#/d'
查看第5-7行和10-13行
sed -n -e '5,7p' -e '10,13p' file
僅輸出ip地址
ip route show | sed -n '/src/p' | sed -e 's/ */ /g' | cut -d' ' -f9