Linux 在不使用正则表达式的带换行符的文件内容中搜索带grep的关键字
我是否有办法执行grep命令,以便: 这是要查找的关键字“主题:这是关键字” 在文件中,这些可能是可能的结果 主题:这是一个\n 关键词 主题:这是\n 关键词 主题:此\n 这是一个关键词 我不知道有多少变化。 有没有一种方法可以在没有正则表达式的情况下使用grep来匹配所有这些场景Linux 在不使用正则表达式的带换行符的文件内容中搜索带grep的关键字,linux,grep,Linux,Grep,我是否有办法执行grep命令,以便: 这是要查找的关键字“主题:这是关键字” 在文件中,这些可能是可能的结果 主题:这是一个\n 关键词 主题:这是\n 关键词 主题:此\n 这是一个关键词 我不知道有多少变化。 有没有一种方法可以在没有正则表达式的情况下使用grep来匹配所有这些场景 否则,更糟糕的情况是,我必须将所有内容复制到另一个文件中,去掉所有新行并连接,然后对其进行grep处理。在这里,我使用了另外两个简单的实用程序对文件进行格式化,以便在不使用正则表达式的情况下对其进行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:”中也可能出现换行符,则必须编辑该命令
您可以使用
tr
将换行符\n
转换为NUL字符\0
和grep
转换为空格字符之前的可选NUL字符
从以下位置使用示例输入文件:
$tr'\n'\0'
如果需要,可以将匹配中的NUL字符转换回换行符
$ tr '\n' '\0' < test.txt | grep -aPo 'Subject: This\0? is\0? a\0? keyword' | tr '\0' '\n'
Subject: This is a
keyword
Subject: This is
a keyword
Subject: This
is a keyword
$tr'\n'\0'
或删除NUL字符
$ tr '\n' '\0' < test.txt | grep -aPo 'Subject: This\0? is\0? a\0? keyword' | tr -d '\0'
Subject: This is a keyword
Subject: This is a keyword
Subject: This is a keyword
$tr'\n'\0'
选项:
将二进制输入文件视为文本-a
启用与Perl兼容的正则表达式(PCRE)-P
仅打印匹配的零件-o
$ tr '\n' '\0' < test.txt | grep -aPo 'Subject: This\0? is\0? a\0? keyword' | tr '\0' '\n'
Subject: This is a
keyword
Subject: This is
a keyword
Subject: This
is a keyword
$ tr '\n' '\0' < test.txt | grep -aPo 'Subject: This\0? is\0? a\0? keyword' | tr -d '\0'
Subject: This is a keyword
Subject: This is a keyword
Subject: This is a keyword