我终于弄清楚了如何在文件的每一行末尾添加文本:
perl -pe 's/$/addthis/' myfile.txt
但是,当我尝试学习Perl以便经常使用正则表达式时,我不知道为什么下面的perl命令将文本“addthis”添加到的末尾并在每行的处开始:
perl -pe 's/$/addthis/g' myfile.txt
我以为'$'匹配行尾,无论正则表达式匹配使用了什么修饰符,但是我想这是错误的吗?
最佳答案
摘要:对于您正在执行的操作,请删除/g
,使其仅在换行符之前匹配。 /g
告诉它在换行符之前和字符串末尾(在换行符之后)匹配。
如果没有/m
修饰符,则$
将在换行符之前(如果它出现在字符串的末尾)或字符串的末尾进行匹配。例如,对于"foo"
和"foo\n"
,$
将在foo
之后匹配。但是,使用"foo\nbar"
,它将在bar
之后匹配,因为嵌入的换行符不在字符串的末尾。
使用/g
修饰符,您将获得$
匹配的所有位置-因此
s/$/X/g;
将采用类似于
"foo\n"
的行并将其转换为"fooX\nX"
。侧边栏:
/m
修饰符将允许$
匹配字符串末尾之前出现的换行符,以便s/$/X/mg;
将
"foo\nbar\n"
转换为"fooX\nbarX\nX"
。
关于regex - $和Perl的全局正则表达式修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14940938/