Bash
在文件中匹配模式的下一行的開頭追加一個字元
測試文件:
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{...}
。