首頁 > 軟體

實用的sed高階命令

2020-06-16 16:48:47

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


IT145.com E-mail:sddin#qq.com