使用换行符在文件内容中使用grep搜索关键字,而不使用正则表达式



有没有一种方法可以让我执行grep命令:

这是一个关键词,可以找到"主题:这是关键词">

在文件中,这些可能是的可能结果

主题:这是一个关键词

主题:这是关键词

主题:这个是关键字

我不知道有多少变化。有没有一种方法可以在没有regex的情况下使用grep来匹配所有这些场景?

否则,更糟糕的情况是,我将不得不将所有内容复制到另一个文件,删除所有新行并连接,然后进行grep

这里我使用了另外两个简单的实用程序来格式化文件,这样就可以在不使用正则表达式的情况下对其进行grep。

注意,在这种情况下,新的临时换行符总是以"Subject:.."开头,因此grep的输出可能包含该行的其余部分,直到下一个"Subject:.."。

示例输入文件:

Subject: This is a
 keyword
Sample text here-
Subject: This is
 a keyword
Another text here
Subject: This
 is a keyword
Ending line!

命令:

cat test.txt | tr -d 'n' | sed 's/Subject: /n&/g' | grep 'Subject: This is a keyword'

样本输出:

Subject: This is a keywordSample text here-
Subject: This is a keywordAnother text here
Subject: This is a keywordEnding line!

请注意,如果换行符甚至出现在单词"Subject:"中,则必须编辑该命令。

您可以使用tr将换行符n转换为NUL字符grep,用于空格字符之前的可选NUL字符。

使用用户12938074:的示例输入文件

$ tr 'n' '' < test.txt | grep -aPo 'Subject: This? is? a? keyword'
Subject: This is a  keyword
Subject: This is  a keyword
Subject: This  is a keyword

如果需要,您可以将匹配中的NUL字符转换回换行

$ tr 'n' '' < test.txt | grep -aPo 'Subject: This? is? a? keyword' | tr '' 'n'
Subject: This is a
 keyword
Subject: This is
 a keyword
Subject: This
 is a keyword

或删除NUL字符

$ tr 'n' '' < test.txt | grep -aPo 'Subject: This? is? a? keyword' | tr -d ''
Subject: This is a keyword
Subject: This is a keyword
Subject: This is a keyword

选项:

  • -a将二进制输入文件视为文本
  • -P启用Perl兼容正则表达式(PCRE(
  • -o仅打印匹配零件

相关内容

最新更新