sample_file:
this is a test line!
this is a test line!
this is a test line!
this is a test line!
我使用Perl one-liner代替这样的文字:
perl -pi -e 's{this(.*)\s}{\n\1\n}i && s{.*\n}{}' sample_file
this(.*)\s
部分和\1
部分是可变的,我无法改变它(它来自用户输入)。
我的问题是我需要调整{\n\1\n}
部分,具体取决于第一个正则表达式是否包含换行符。
例如,如果第一个正则表达式是{this(.*)\s}
,我需要{\n\1\n}
,但如果第一个正则表达式{(.*)a test}
我需要{\n\1}
。
如何检查换行符是否丢失并在必要时将其放回?
答案 0 :(得分:1)
一般来说,您希望chomp
输入行,并为输出行添加换行符。 -l
(与-n
或-p
一起)将同时执行这两项操作。
例如,以下内容并未将换行符替换为!
,因为它已被-l
删除(随后由print
重新添加)。
perl -i -ple's/\s/!/g' file
顺便说一句,\1
("匹配第一次捕获的捕获")在替换中毫无意义。您想要$1
(如-w
所示)。