如何在文件中搜索文本而忽略换行符?

如何在文件中搜索文本而忽略换行符?

我想搜索文件中可能分为多行的文本。一个 grep 会忽略换行符并返回匹配的行范围。

例如,我将搜索is an example file,并期望在以下文件中找到它:

这是
一个
示例文件。

不依赖于前导空格或尾随空格,完全忽略所有形式的空格可能是最好的(理想情况下,将任何空格序列视为单个空格)。


一种非理想的解决方案是tr '\n' ' ' | grep,它区分匹配和不匹配,但不显示匹配,也不能很好地处理大文件。

答案1

GNUgrep可以做到

grep -z 'is\san\sexample\sfile.' file

为了满足评论中提出的一些观点,对脚本进行了一些修改:

 grep -oz '^[^\n]*\bis\s*an\s*example\s*file\.[^\n]*' file

关于大文件,我没有想象的内存限制,但如果出现问题,你可以随意使用sed

sed '/\bis\b/{
          :1
          N
          /file\.\|\(\n.*\)\{3\}/!b1
         }
     /\<is\s*an\s*example\s*file\./p
     D' file

内存中保留不超过 4 行(因为模式中有 4 个单词)( \(\n.*\)\{3\})。

答案2

尝试这个:

pcregrep -M '\bThis\s+is\b' <<EOT
This
is
an example
file.
EOT

相关内容