在下一行的开头附加一个与整个文件中的模式匹配的字符

在下一行的开头附加一个与整个文件中的模式匹配的字符

测试文件:

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=0inside ,标志只能用于它设置的下一行p{...}

相关内容