Bash

在文件中匹配模式的下一行的開頭追加一個字元

  • May 25, 2022

測試文件:

cat Test.txt
#EXTM3U

#EXTINF:100
a.flac

#EXTINF:20
b.flac

預期結果

cat Test.txt
#EXTM3U

#EXTINF:100
#a.flac

#EXTINF:20
#b.flac

實驗一

sed -e '/^#EXTINF/a #'  Test.txt
#EXTM3U

#EXTINF:100
#
a.flac

#EXTINF:20
#
b.flac

建議?

我的實驗在 append 之後添加了一個新行#,我不希望添加那個新行。

$ sed -e '/^#EXTINF/{n;s/^/#/;}' Test.txt
#EXTM3U

#EXTINF:100
#a.flac

#EXTINF:20
#b.flac

在哪裡

  • n列印模式空間(在本例中為匹配行^#EXTINF),然後將輸入的下一行讀模式空間
  • s/^/#/ #在新讀取行的開頭替換

awk

awk '{print} /^#EXTINF/ && (getline > 0) {print "#" $0}' file

列印任何一行,然後測試圖案。如果模式匹配,則getline呼叫獲取下一行進行處理。也&& getline用於測試下一行是否存在並且我們還沒有到達文件末尾,以避免在匹配時再次列印最後一行。


沒有相同的getline

awk 'p{$0 = "#" $0; p=0} /^#EXTINF/{p=1} {print}' file

使用標誌 ( p),在找到模式時設置它。p=0由於inside ,標誌只能用於設置它的下一行p{...}

引用自:https://unix.stackexchange.com/questions/703714