我有这个文本文件或 sdout:
text1
text2
text1
text2
text1
text2
我有这个代码:
perl -pe "s/text2\n\z/text3/s" text.txt #Note the modifier "/s"
我和 \z 希望他明白这是 eof 之前的最后一行,因此我希望:
text1
text2
text1
text2
text1
text3
但相反,它返回:
text1
text3text1
text3text1
text3 #without final newline
我究竟做错了什么?
命令行选项
-p
意味着文件是逐行处理的,即你所做的基本上是:因此,
\z
不匹配所有输入数据的结尾,而是每行的结尾。您可能需要的不是使用
-p
,而是阅读完整文件并仅替换结尾。$
请注意,只需使用and就可以简化正则表达式,/s
并且\z
不需要:没有必要在整个文件中啜饮。使用这个 Perl 单行:
印刷:
我采用的解决方案是: