2021-05-12 14:32:11
實用的sed高階命令
sed基礎命令在工作中會經常用到,大家都很熟悉了。sed有一些非常實用的高階命令,用的比較少,就比較容易忘記,所以記錄一下,以後忘記了可以來檢視。
n 跳過當前行,讀取下一行
nl passwd |sed -n '{n;p}'
{} 花括號
可以在花括號裡面執行多個命令用;分隔。列如
nl passwd |sed -n '{n;p}' #列印偶數行
& 替換固定字串
例如要把字串xiaoke替換成xiaoketest,可以使用
sed 's/xiaoke/xiaoketest/' test.txt 或者
sed 's/xiaoke/&test/' test.txt
元字元u l U L :轉換為大寫/小寫字元
u 將首字元轉成大寫
U 將所有字元轉成大寫
使用()獲取正則匹配的內容,使用1 獲取第一個括號的內容,使用2獲取第二個括號裡面的內容
例如:獲取passwd檔案的使用者名稱
使用()獲取到使用者名稱欄位
sed 's/(^[a-z-]+):.*/1/' passwd
使用( )替換部分字元
例子1: 把w1w2w3替換w1
echo "w1w2w3"|sed 's/w1(w2)w3/1/'
注意:()和( )的區別為()用於正則裡面,( )使用者字元
例子2: 把w1w2w3替換為w1w3w2
echo "w1w2w3"|sed 's/(w1)(w2)(w3)/132/'
列子3: 從passwd檔案檔案獲取使用者名稱、uid、gid
sed 's#(^[a-z-]+):x:([0-9]+):([0-9]+):.*#1----2----3#' passwd
例子4: 使用sed獲取ip地址
方法1:
/sbin/ifconfig |sed -n '/inet.*:172/p'|sed -e 's/inet.*r://' -e 's/Bcast.*$//'|tr -d ' '
方法2:
ifconfig eth0|sed -n '/inet /p'|sed 's/inet ([0-9.]+) .*/1/'|tr -d ' '
注意,在markdown編輯器裡面正則部分需要再次跳脫符號,不然展示的時候跳脫符號會丟失
sed命令---行定位
列印出檔案的第十行 (定位單行)
nl passwd |sed -n '10p'
列印出檔案的第十到十五行 (多行定位)
nl passwd |sed -n '10,15p'
列印出包含root的行 (單行定位)
nl passwd |sed -n '/root/p'
列印出包含root開始的行到包含games結束的行 (多行定位)
nl passwd |sed -n '/root/,/games/p'
從root開始的行到games結束的行,都不要
nl passwd |sed -n '/root/,/games/!p'
列印出檔案非第十行的內容 (單行取反)
nl passwd |sed -n '10!p'
列印出檔案的非第十到十五行內容 (多行取反)
nl passwd |sed -n '10,15!p'
步進獲取行的內容(從第一行開始步近)
nl passwd |sed -n '1~2p'
結果為1,3,5,7......行
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-08/153570.htm
相關文章