grep如何将转义的换行符视为真正的换行符?

grep如何将转义的换行符视为真正的换行符?,grep,newline,Grep,Newline,我正在使用grep在某个目录中查找单词: grep -r my_word directory 在此目录中,有一些文件包含带有转义换行符的my_word,因此grep的输出类似于: file_name.txt:first line\n second line my_word\n third line 如何强制grep将\n视为新行并显示以下内容: second line my_word 您可以通过sed将结果转换为换行符,然后再次执行grep: grep -r my_word directo

我正在使用grep在某个目录中查找单词:

grep -r my_word directory
在此目录中,有一些文件包含带有转义换行符的my_word,因此grep的输出类似于:

file_name.txt:first line\n second line my_word\n third line
如何强制grep将\n视为新行并显示以下内容:

second line my_word

您可以通过sed将结果转换为换行符,然后再次执行grep:

grep -r my_word directory | sed 's/\\n/\n/g' | grep 'my_word'
或者,如果您的grep支持与Perl兼容的正则表达式,如GNU grep,则可以使用look arounds:

$ grep -Po '.*^|\\n\K.*my_word.*?(?=\\n|$)' myfile
 second line my_word
这使用一个可变长度的后向查找,.*^ |\\n\K,贪婪地删除带有搜索词的行之前\n最后一次出现的所有内容,并且。*???=\\n |$非贪婪地匹配行的其余部分,直到下一行\n或行的结尾

如果不希望在结果中包含文件名,以防匹配出现在第一个子行中,则可以使用grep-h抑制文件名