测试文件:
cat Test.txt
#EXTM3U
#EXTINF:100
a.flac
#EXTINF:20
b.flac
预期结果
cat Test.txt
#EXTM3U
#EXTINF:100
#a.flac
#EXTINF:20
#b.flac
实验 1
sed -e '/^#EXTINF/a #' Test.txt
#EXTM3U
#EXTINF:100
#
a.flac
#EXTINF:20
#
b.flac
建议?
我的实验在附加后添加了一个新行#
,我不希望添加该新行。
答案1
$ sed -e '/^#EXTINF/{n;s/^/#/;}' Test.txt
#EXTM3U
#EXTINF:100
#a.flac
#EXTINF:20
#b.flac
在哪里
n
打印模式空间(在本例中为匹配 的行^#EXTINF
),然后读取n模式空间的输入的外部行s/^/#/
s替换#
在新读取的行的开头
答案2
和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{...}
。