您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關shell中sed命令如何使用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
sed工具:sed是文本流編輯器,逐行對文件的內容進行處理
用法:sed [option] ... 'script' inputfile...
選項:
-n:靜默模式,不輸出模式空間的內容至屏幕
-e:實現多點的功能編輯
-f /path/from/script_file:從指定的文件讀取編輯腳本
-r:支持使用擴展的正則表達式
地址界面方法:
(1)不給地址:對全文進行處理
(2)一個地址(單地址)
#:指定的行
/pattern/:被引用處模式所能夠匹配到的每一行:
(3)地址范圍
#,#:從第幾行到第幾行
#,+#:顯示從第幾行開始向后的N行
/pat1/,/pat2/:同時匹配2個參數,表示匹配這2個參數之間的所有行
#,/pat1/:表示匹配這2個參數之間的所有行
(4)~:步進
#sed -n ‘1~2p’ test.txt(第一行開始,每次增加2行,意思就是顯示奇數行)
#sed -n ‘2~2p’ test.txt(從第二行開始顯示,每次增加2行,意思就是顯示偶數行)
編輯命令:
d:刪除被地址界定選定的內容
p:顯示(打印)模式空間中的內容到屏幕上,只打印符合條件的行,常于-n結合一起使用
a \text:在行后面一行追加文本:支持使用\n實現多行追加;
例: #sed '/^T/a \abc' a.txt
i \text:在行前面一行追加文本:支持使用\n實現多行追加;
例:# sed '/^T/i \abc' a.txt
c \text:替換匹配到的行:
例:# sed '/^T/c \abc' a.txt
w /path/to/somefile:保存模式空間中匹配到的內容至指定文件中;
r /path/from/somefile:讀取指定文件的文本游戲 至模式空間中匹配到的行后;
=:為模式空間中的行,打印行號;
例:#sed -n '/^T/=' a.txt
q:一旦匹配到內容,則退出;不再往下匹配
!:取反條件;對除了模式匹配到的行以外的行,進行操作;
s///:支持使用其它分隔符,s@@@,s###
替換標記:
g:行內全局進行替換:例:sed -n ‘s@r..t@&er@p’ /etc/passwd 不帶g選項,只替換每一行的第一次
#:行內替換,替換第幾次出現的匹配的內容,例:sed -n 's/Unix/UNIX/2p' a.txt,把第2次出現的Unix替換
p:如果替換成功,則顯示替換成功的行,與-n一起使用
w /path/to/somefile:將替換成功的行保存至指定文件中
練習1:刪除/boot/grub/grub.conf文件中所有以空白開頭的行行首的空白字符
#sed 's@^[[:space:]]\+@@' /boot/grub/grub.conf
練習2:刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符
#sed 's@^#[[:space:]]\+@@' /etc/fstab
練習3:echo一個絕對路徑給sed命令,取出其基名:
#echo "/etc/sysconfig" | sed 's@[^/]\+$@@'
練習4:批量修改文件名字
#ls *.jpg | sed 's#\(.*\)_finished\(.*\).*#mv & \1\2#g' | bash
高級編輯命令:
h:把模式空間中的內容覆蓋至保持空間中;
H:把模式空間的內容追加至保持空間中;
g:從保持空間取出數據覆蓋至模式空間;
G:從保持空間取出數據追加至模式空間;
x:把模式空間中內容與保持空間中的內容進行互換操作;
n:讀取匹配到的行的下一行覆蓋至模式空間;
N:讀取匹配到的行的下一行追加至模式空間;
d:刪除模式空間中的所有行;
D:刪除多行模式空間中的第一行;
示例用法:
#sed -n ‘n;p’ test.txt(輸出偶數行)
#sed ‘n;d’ test.txt(只顯示奇數行)
#sed ‘$!d’ test.txt(最出文件最后一行)
#sed ‘G’ test.txt(在每一行下面加一個空白行)
#sed ‘/^$/d;G’ test.txt(每行間只保留一個空白行)
#sed '1!G;h;$!d' test.txt(逆行顯示文件內容)
#sed ‘$!N;$!D’ test.txt(讀文件的后2行)
#sed -n ‘1!G;h;$p’ test.txt(逆行顯示文件內容)
保持空間使用的一個例子:
需求:把單詞the和statement之間的單詞的全部改為大寫
原文:
find the Match statement
consult the Get statement
using the Read statement to retrieve data
sed寫法:
/the .*statement/{
h
s/.*the \(.*\)statement.*/\1/
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
G
s/\(.*\)\n\(.*the \).*\( statement.*\)/\2\1\3/
}
結果:
find the MATCH statement
Consult the GET statement
using the READ statement to retrieve data
解析:
/the .*statement/:匹配這種模式的行,然后進行修改
h:將匹配到的內容覆蓋至保持空間,保留一份復本
s/.*the \(.*\)statement.*/\1/:在模式空間中將匹配到行轉換為要改變的單詞
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/:將修改后的單詞轉換為大寫
G:把保持空間的復本追加到模式空間
s/\(.*\)\n\(.*the \).*\( statement.*\)/\2\1\3/:將修改為大寫的單詞替換到原語句中的單詞
感謝各位的閱讀!關于“shell中sed命令如何使用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。