sed文本編輯

sed:編輯器
sed: Stream EDitor, 行編輯器;
用法:
sed [option]... 'script' inputfile...
script: '地址命令'
常用選項:
-n:不輸出模式中的內(nèi)容至屏幕;
-e: 多點編輯;
-f /PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本;
-r: 支持使用擴展正則表達式;
-i: 原處編輯;

地址定界:
(1) 不給地址:對全文進行處理;
(2) 單地址:
#: 指定的行;
/pattern/:被此處模式所能夠匹配到的每一行;
(3) 地址范圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步進
1~2
2~2
編輯命令(script):
d: 刪除
p: 顯示模式空間中的內(nèi)容
a \text:在行后面追加文本;支持使用\n實現(xiàn)多行追加;
i \text:在行前面插入文本;支持使用\n實現(xiàn)多行插入;
c \text:替換行為單行或多行文本;
w /path/to/somefile: 保存模式空間匹配到的行至指定文件中;
r /path/from/somefile:讀取指定文件的文本流至模式空間中匹配到的行的行后;
=: 為模式空間中的行打印行號;
!: 取反條件;
s///:支持使用其它分隔符,s@@@,s###;
替換標記:
g: 行內(nèi)全局替換;
p: 顯示替換成功的行;
w /PATH/TO/SOMEFILE:將替換成功的結(jié)果保存至指定文件中;

練習1:刪除/boot/grub/grub.conf文件中所有以空白開頭的行行首的空白字符;
[root@node /]# sed 's@^[[:space:]]\+@@' /etc/grub2.cfg
[root@node /]# sed -r 's#^[[:space:]]+##' /etc/grub2.cfg

練習2:刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符;
[root@node /]# sed 's@^#[[:space:]]\+@@' /etc/fstab

練習3:echo一個絕對路徑給sed命令,取出其基名;取出其目錄名;
[root@node /]# echo "/etc/sysconfig/" | sed 's@[^/]\+/\?$@@'
[root@node /]# echo /etc/fstab | sed -r 's@(.*/)([^/]+$)@\2@'
[root@node /]# echo /etc/fstab/ | sed -r 's@(.*/)([^/]+/$)@\1@'
[root@node /]# echo /etc/fstab/ | sed -r 's@(.*/)([^/]+/?$)@\1@'

高級編輯命令:
h: 把模式空間中的內(nèi)容覆蓋至保持空間中;
H:把模式空間中的內(nèi)容追加至保持空間中;
g: 從保持空間取出數(shù)據(jù)覆蓋至模式空間;
G:從保持空間取出內(nèi)容追加至模式空間;
x: 把模式空間中的內(nèi)容與保持空間中的內(nèi)容進行互換;
n: 讀取匹配到的行的下一行至模式空間;
N:追加匹配到的行的下一行至模式空間;
d: 刪除模式空間中的行;
D:刪除多行模式空間中的所有行;

                sed -n 'n;p' FILE:顯示偶數(shù)行
                sed '1!G;h;$!d' FILE:逆向顯示文件內(nèi)容
                sed '$!N;$!D' FILE: 取出文件后兩行;
                sed '$!d' FILE:取出文件最后一行;
                sed 'G' FILE: 
                sed '/^$/d;G' FILE: 
                sed 'n;d' FILE: 顯示奇數(shù)行;
                sed -n '1!G;h;$p' FILE: 逆向顯示文件中的每一行;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容