sed: Stream EDitor, 行編輯器;
用法:
sed [option]… ‘script’ inputfile…
script:
‘地址命令‘
常用選項:
-n:不輸出模式中的內容至屏幕;
-e: 多點編輯;
-f /PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本;
-r: 支持使用擴展正則表達式;
-i: 原處編輯;
例一:,刪除文件已UUID開關的命令行
[root@localhost ~]# sed '/^UUID/d' /etc/fstab
地址定界:
(1) 不給地址:對全文進行處理;
(2) 單地址:
#: 指定的行;
/pattern/:被此處模式所能夠匹配到的每一行;
(3) 地址范圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步進
1~2
2~2
例一:指定第一行到第10行刪除
[root@localhost ~]# sed '1,10d' /etc/fstab
編輯命令:
d: 刪除
p: 顯示模式空間中的內容
a \text:在行后面追加文本;支持使用\n實現多行追加;
i \text:在行前面插入文本;支持使用\n實現多行插入;
c \text:替換行為單行或多行文本;
w /path/to/somefile: 保存模式空間匹配到的行至指定文件中;
r /path/from/somefile:讀取指定文件的文本流至模式空間中匹配到的行的行后;
=: 為模式空間中的行打印行號;
!: 取反條件;
s///:支持使用其它分隔符,s@@@,s###;
替換標記:
g: 行內全局替換;
p: 顯示替換成功的行;
w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中;
例一:在UUID文本后追加文本
[root@localhost ~]# sed '/^UUID/a \hello dongzhikang' /etc/fstab
例二:將UUID命令替換結果保存到指定文件中
[root@localhost ~]# sed '/UUID/w /tmp/fstab.txt' /etc/fstab
例三:模式空間匹配到的行至指定文件中
[root@localhost ~]# sed '6r/etc/lssus' /etc/fstab
例四:顯示符合條件的行號
[root@localhost ~]# sed '/^UUID/=' /etc/fstab # /dev/mapper/VolGroup-lv_root / ext4 defaults 1 1 10 UUID=d928b19c-a5b3-4b6d-918c-2952b6353c69 /boot ext4 defaults 1 2
例一:替換以p開關的c結尾的加er
[root@localhost etc]# sed 's@p..c@&er@' /etc/fstab
練習1:刪除/boot/grub/grub.conf文件中所有以空白開頭的行行首的空白字符;
~]# sed ‘s@^[[:space:]]\+@@’ /etc/grub2.cfg
練習2:刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符;
~]# sed ‘s@^#[[:space:]]\+@@’ /etc/fstab
練習3:echo一個絕對路徑給sed命令,取出其基名;取出其目錄名;
~]# echo “/etc/sysconfig/” | sed ‘s@[^/]\+/\?$@@’
高級編輯命令:
h: 把模式空間中的內容覆蓋至保持空間中;
H:把模式空間中的內容追加至保持空間中;
g: 從保持空間取出數據覆蓋至模式空間;
G:從保持空間取出內容追加至模式空間;
x: 把模式空間中的內容與保持空間中的內容進行互換;
n: 讀取匹配到的行的下一行至模式空間;
N:追加匹配到的行的下一行至模式空間;
d: 刪除模式空間中的行;
D:刪除多行模式空間中的所有行;
sed -n ‘n;p’ FILE:顯示偶數行
sed ‘1!G;h;$!d’ FILE:逆向顯示文件內容
sed ‘$!N;$!D’ FILE: 取出文件后兩行;
sed ‘$!d’ FILE:取出文件最后一行;
sed ‘G’ FILE:
sed ‘/^$/d;G’ FILE:
sed ‘n;d’ FILE: 顯示奇數行;
sed -n ‘1!G;h;$p’ FILE: 逆向顯示文件中的每一行;
例一:逆向顯示文件中的每一行
[root@localhost ~]# sed '1!G;h;$p' test.txt
原創文章,作者:kang,如若轉載,請注明出處:http://www.www58058.com/77646