sed 學習筆記

來源:互聯網
上載者:User

聲明:
這些代碼只是為了學習和理解sed命令而為之,並不
代表問題的唯一解或最佳解,希望各位拍磚

參考資
料:<sed&awk.pdf>等
一. 替換

1.神奇變換(y
命令的使
用)

代碼:
sed 'y/ori_letter_list/target_letter_list/' filename

代碼:
cat filename
1234567890
2345678901
3456789012

4567890123

測試

檔案中1
換成A

將檔案中2
換成B

...
將檔案中0
換成J

代碼:
sed 'y/1234567890/ABCDEFGHIJ/' filename
ABCDEFGHIJ
BCDEFGHIJA

CDEFGHIJAB
DEFGHIJABC

注意變換關係是按兩個list的位置對應變換,y是一個管局命令,拒絕使用尾碼flag/g

list1:1234567890
list2:ABCDEFGHIJ

面再作一個與前例相反的變換

代碼:
sed 'y/0987654321/ABCDEFGHIJ/' filename
JIHGFEDCBA
IHGFEDCBAJ

HGFEDCBAJI
GFEDCBAJIH

2.替換每行第一個匹配

代碼:
sed 's/regexpr/anyword/' filename
sed
's/regexpr/anyword/1' filename


舉例:

引用:
cat filename
1234567890 2345678901
3456789012
4567890123
sed 's/5/五/' filename
1234五67890 2345
678901
34五6789012 45
67890123

3.替換每行第n(如果有的
話)個匹配

代碼:
sed "s/regexpr/anyword/${n}" filename
cat filename
111111111111111111

222222222222222222
333333333333333333
444444444444444444


sed "s/4/ 四 /8" filename
111111111111111111
222222222222222222

333333333333333333
4444444 四 4444444444

4.替換每行所有匹配

代碼:
cat filename
1234567890 2345678901
3456789012
4567890123


代碼:
舉例:
sed 's/3/三/g' filename
12三4567890
2三45678901
三456789012 456789012三

二.行號處理

1.
為檔案加行號

代碼:
sed = filename|sed 'N;s//n/:/'
cat filename
111111111111111111

222222222222222222
333333333333333333
444444444444444444


舉例

代碼:
sed = filename|sed 'N;s//n/:/' filename
1:111111111111111111

2:222222222222222222
3:333333333333333333
4:444444444444444444

2.僅為檔案中的本文行加行

代碼:
sed /./= a|sed '/./N;s//n/:/'


舉例

代碼:
cat filename
111111111111111111

222222222222222222

333333333333333333

444444444444444444

sed /./=
a|sed '/./N;s//n/:/' filename
1:111111111111111111

3:222222222222222222

4:333333333333333333

6:444444444444444444

三.字串翻轉

代碼:
sed '//n/!G;s//(./)/(.*/n/)/&/2/1/;//D;s/.//'


舉例

代碼:
echo 1234567890|sed
'//n/!G;s//(./)/(.*/n/)/&/2/1/;//D;s/.//'
0987654321

四.選擇性輸出

1.列印文檔奇數行(隔行輸出)

代碼:
sed 'n;d'
sed 'x;$!N;x'
sed -n 'p;n'

1
3

5
7

2.列印偶數行(隔行輸出)

代碼:
sed -n 'n;p'
sed '1d;n;d;'
2
4
6
8

3.刪除連續重複行(大量使
用了pattern space 檔案太大時要注意)

代碼:
sed '$!N; /^/(.*/)/n/1$/!P; D'     
#使用 $!N 要當心記憶體溢出


舉例

代碼:
cat file
111111111111111111
222222222222222222
222222222222222222

333333333333333333
444444444444444444
444444444444444444
444444444444444444

444444444444444444
444444444444444444

sed '$!N;
/^/(.*/)/n/1$/!P; D' filename
111111111111111111
222222222222222222

333333333333333333
444444444444444444

4.合并上下行並以空格相分

代碼:
sed '$!N;s//n/ /'


舉例

代碼:
cat file
1234567890
0987654321
執行命令後
1234567890
0987654321

5.將以/符號結尾的行與下行合并並以空格分隔(拼接斷行)

代碼:
sed -e :a -e '///$/N; s////n/ /; ta'


舉例

代碼:
cat filename
1 111111111111111111/
2
222222222222222222
3 333333333333333333/
4 444444444444444444

sed
-e :a -e '///$/N; s////n/ /; ta' filename
1 111111111111111111 2
222222222222222222
3 333333333333333333 4 444444444444444444

6.按關鍵字拼接行

如果某行以=開始,則合并到上一行並替代=為空白格

代碼:
sed -e :a -e '$!N;s//n=/ /;ta' -e 'P;D'


舉例

代碼:
cat file
111111111111111111
222222222222222222
=333333333333333333

444444444444444444

sed -e :a -e '$!N;s//n=/ /;ta' -e 'P;D'
filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444

7.輸出匹配行的下一行

代碼:
sed -n '/regexpr/{n;p;}' filename


舉例

代碼:
cat filename
1 111111111111111111
2
222222222222222222
3 333333333333333333
4 444444444444444444

sed
-n '/^3/{n;p;}' filename
4 444444444444444444

8.顯示匹配行的行號並輸出
匹配行的上行、匹配行、下行

sed -n -e '/regexpr/{=;x;1!p;g;$!N;p;D;}'
-e h
舉例

代碼:
cat filename
1 111111111111111111
2
222222222222222222
3 333333333333333333
4 444444444444444444

sed
-n -e '/^3/{=;x;1!p;g;$!N;p;D;}' -e h  filename
3                   
                   #匹配行的行號
2 222222222222222222  #上一行
3
333333333333333333  #匹配行
4 444444444444444444  #下一行

9.刪除文檔中某標誌地區內
的關鍵字匹配行

刪除文檔中從being開到end結束的塊中包含myword的行

代碼:
sed '/^begin/,/^end/{/myword/d;}' filename


引用:
cat filename
myword
begin
myword
Number!
myword
Number!
myword

Number!
myword
Number!

end
myword
Number!

測試

引用:
myword
begin
Number!

Number!
Number!
Number!

end
myword
Number!

五.字串解析

1.從字串中解析出兩個子串(前2各字元和後9個字元)

代碼:
echo "WeLoveChinaUnix"|sed -e
'H;s//(../).*//1/;x;s/.*/(./{9/}/)$//1/;x;G;s//n/ /'
We ChinaUnix

2.分解日期串

代碼:
echo 20030922|sed 's//(..../)/(../)/(../)//1 /2
/3/'|read year month day
echo $year $month $day
2003 09 22


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.