理解Linux 中sed命令的工作機制

小鲨鱼2018發表於2024-10-29

001、

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt                ## 測試資料
01 02
03 04 kk
05 06
07 08
09 10
11 12
[root@PC1 test]# sed '' a.txt             ## 說明在預設情況下,sed會原樣輸出的
01 02
03 04 kk
05 06
07 08
09 10
11 12
[root@PC1 test]# sed -n '' a.txt           ## -n選項遮蔽了資料的原樣輸出

002、

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt                      ## 測試資料
01 02
03 04 kk
05 06
07 08
09 10
11 12
[root@PC1 test]# sed -n '/kk/p' a.txt          ## 說明-p會輸出匹配的行
03 04 kk
[root@PC1 test]# sed -n '/kk/{n;p}' a.txt      ## 為什麼輸出了匹配行的下一行。 匹配行為kkk,但是n選項會讀入下一行,然後p輸出。 (此處的n跟 前邊的-n不是一個東西!!!)
05 06

003、

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt                                 ## 測試資料
01 02
03 04 kk
05 06
07 08
09 10
11 12
[root@PC1 test]# sed -n '/kk/p' a.txt                      ## -n遮蔽原始資料, p輸出匹配行
03 04 kk
[root@PC1 test]# sed -n '/kk/{n;p}' a.txt                  ## n選項讀取了下一行放入模式空間,但是隻對讀取的第二行進行處理
05 06
[root@PC1 test]# sed -n '/kk/{N;p}' a.txt                  ## N選項讀取了下一行放入模式空間,會將兩行當作一行來處理
03 04 kk
05 06

004、

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt                ## 測試資料
01 02
03 04 kk
05 06
07 08
09 10
11 12
[root@PC1 test]# sed 'N;p' a.txt       ## 首選輸出基礎的行,因為沒有-n, 然後N每次讀入下一行,兩行當作一行,p輸出,因為沒兩行重複一次
01 02
03 04 kk
01 02
03 04 kk
05 06
07 08
05 06
07 08
09 10
11 12
09 10
11 12
[root@PC1 test]# sed 'n;p' a.txt      ## 首先輸出基礎行(如果不是首先輸出基礎行,則第一行是03 04 kk),然後n讀取下一行,但是隻把讀入的下一行放入模式空間, 因此是沒兩行處理一次,進輸出第二行
01 02
03 04 kk
03 04 kk
05 06
07 08
07 08
09 10
11 12
11 12

相關文章