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

时间:2017-03-20 15:41:26

标签: grep newline

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

grep -r my_word directory

在此目录中,包含my_word的文件包含转义换行符(\n),因此grep的输出类似于:

file_name.txt:first line\n second line my_word\n third line

如何强制grep\n视为新行并显示如下内容:

second line my_word

1 个答案:

答案 0 :(得分:1)

您可以通过sed管道结果来转换换行符,然后再次grep:

grep -r my_word directory | sed 's/\\n/\n/g' | grep 'my_word'

或者,如果你的grep支持Perl兼容的正则表达式(例如GNU grep),你可以使用环视:

$ grep -Po '.*^|\\n\K.*my_word.*?(?=\\n|$)' myfile
 second line my_word

这使用可变长度的后视.*^|\\n\K来贪婪地删除截至搜索字词前一行\n之前的所有内容,并.*?(?=\\n|$)非贪婪地匹配线的其余部分,直到下一个\n(或行尾)。

如果您不想在结果中使用文件名,以防匹配位于第一个“子线”,则可以使用grep -h取消文件名。