Linux基礎 sed替換

2021-07-29 02:19:34 字數 3454 閱讀 9006

egrep 查詢符合條件的行

sed 查詢指定第幾行-第幾行

sed 可以實現 grep 的大部分功能,而且還可以查詢替換。唯一缺陷是不能有顏色區分顯示。重點在 -i的直接替換選項。

-n 只列印符合規則的行,一定和p一起使用。

列印指定行 p表示print,

想起來sed,就記住np【翔翔】

#sed '10'p -n 1.txt 列印第10行

#sed '1,4'p -n 1.txt 列印1-4行

#sed '5,$'p -n 1.txt 列印5到末行

#sed '10'p 1.txt 不加 -n 列印所有的行

列印包含某個字串的行

#sed -n '/root/'p 1.txt

可以使用 ^ . * $ 等特殊符號

#sed -n '/root/'p 1.txt

#sed -n '/^roo/'p 1.txt

#sed -n '/r.*t/'p 1.txt 貪婪匹配

#sed -n '/r?t/'p 1.txt ?需要脫意符號

sed 不識別 + ? 並且符號| {} 組合符號() 等符號,需要借助脫意符號 \ 或者

使用選項 -r

#sed -n -r '/ro+/'p 1.txt

#sed -n '/ro\+/'p 1.txt

# sed -n '/\(oo\)\+/'p 1.txt

# sed -n -r '/(oo)/'p 1.txt

# sed -r -n '/roo|ftp/'p 1.txt

sed支援grep的所有表示式,取非,開頭結尾等,需要用-r。

匹配包含root或者 body 的行

-e 同時進行多個表示式

#sed -e '/root/p' -e '/body/p'

-n 1.txt -n在filename前面,或者在sed後面,其他位置不行。

#egrep -n 'root|body' 1.txt

; 同時進行多個表示式

#sed '/root/p ; /body/p' -n 1.txt

乙個分號即可,無需全部括起來。分號前面一定要有p,-n位置在前在後沒有影響。如果一行裡面,有root,又有body,那麼會在螢幕上出現兩次這個結果。

| 或者表示式

#sed -n -r '/root|body/'p 1.txt

如果是或者的命令,和上面用分號 ; 進行表達的結果比較,即便有一行既包含root,又包含body, 那麼該命令也只會顯示一次結果,或者的命令只會執行一次。

不顯示指定的行,並非刪除文字中的行

#sed '/root/'

d1.txt 刪除包含root的行

#sed '1'd 1.txt

刪除第一行 '1d' 或者 '1'd

#sed '1,10'd 1.txt

刪除1到10行

#sed '/[a-za-z]/'d 1.txt

刪除包含字母的行

#sed '/[0-9]/'d 1.txt

刪除包含數字的行

替換功能

#sed '1,2s/ot/to/g' 1.txt 全域性替換,全部顯示

s 替換的意思

g 全域性替換

& 增加替換

命令裡面的 / 可以用 # 或者 @ 替換

#sed -n '1,2s/ot/ot/g'p 1.txt 全域性替換,只顯示符合規則的行 -n 一定和 p一起使用

#sed '1,2s@ot@to@g' 1.txt

#sed '1,10s/nologin/login/g' 1.txt 1-10行的nologin替換成login,全域性列印

#sed -n '1,10s/nologin/login/g'p 1.txt 只顯示1-10行修改的行

# sed -n '1,10s/nologin/login/gp' 1.txt 只顯示1-10行修改的行

# sed -n '1,$s/nologin/login/g'p 1.txt 修改第一行到最後一行並列印

# sed -n '1,10s/\/sbin\/nologin/\/sbin\/login/g'p 1.txt ==

#sed -n '1,10s@/sbin/nologin@/sbin/login@g'p 1.txt 只替換1-10行 /sbin/nologin 裡面的nologin為 login,替換後,1-10行的/sbin/nologin替換為 /sbin/login

#sed -n 's@^.*$@login@g'p 1.txt 修改所有的行為 login

#sed -n 's@^.*$@&login@g'p 1.txt 在所有的行後面增加 login

#sed -n 's@^.*$@login&@g'p 1.txt 在所有的行前面增加login

刪除所有數字

#sed 's/[0-9]//g' 1.txt

其實就是把所有數字替換為空格

刪除所有非數字

#sed 's/[^0-9]//g' 1.txt

刪除所有特殊符號

#sed -n 's/[^0-9a-za-z]//g'p 1.txt

調換兩個字串位置,調換前兩行root和bash的位置

#head -n2 1.txt |sed -r 's/(root)(.*)(bash)/\3\2\1/'

# head -n2 1.txt |sed -r 's@(root)(.*)(bash)@\3\2\1@g'

在sed中可以用()表示乙個整體,本例中把 root 和 bash的位置調換,後面的\1\2\3 分別表示第乙個小括號裡面的內容,第二個小括號裡面以及第三個小括號裡面的內容。

前兩行的

第一段,第三段,調換位置。 經過試驗下面的結論並不正確,待解決。

# head -n2 1.txt |sed -r 's#(^[a-z0-9]+)(:.*)(:.*)#\3\2\1#g'

# head -n2 1.txt |sed 's/\(^\[a-z0-9\]\+\)\(:.*\)\(:.*\)/\\3\\2\\1/g'

第一段的username和後一段的 shell 調換位置

#sed -r 's/([^:]+)(:.*:)([^:]+)/\3\2\1/' /etc/passwd

前兩行的第乙個字母和最後乙個字母調換位置

# head -n2 1.txt |sed -r 's/(^.)(.*)(.$)/\3\2\1/'

-i 直接修改檔案內容

【不建議使用】

#sed -i '1,19'd 1.txt 直接刪除文字裡面的1-19行

#sed -i 's/ot/to/g' 1.txt

其實使用的是 s 的替換功能,但是在修改之前,確保沒有錯誤。

最常用注釋5-100行 ,每行的開頭增加#號

sed -i 's/^/#/g' 1.txt

sed 's/^/#&/g' 1.txt

sed 文字替換

呼叫sed命令有兩種形式 sed options command file s sed options f scriptfile file s 刪除 d命令 sed 2d example 刪除example檔案的第二行。sed 2,d example 刪除example檔案的第二行到末尾所有行。se...

sed 文字替換

sed s front back aa.txt sed s front back aa.txt 這兩個命令的作用是一樣的 可以通過vi介面中操作 s front back g s front back 都是全域性替換 將檔案由檢視模式切換成命令模式 上面的 可以替換成 n 指定行數例如第一行 1s ...

Linux 用sed精確匹配和替換

問題 現有一text.txt文字內容如下 ni hao ma n yin gn n nin 現要用 en 將單個單詞 n 下劃線 替換掉 嘗試的方法一 sed i s n en g text.txt 結果 eni hao ma en yien gen en enien 也就是所有的n字元都被替換,而...