【发布时间】:2019-11-22 19:32:49
【问题描述】:
我正在尝试使用常用 bash 命令(grep、awk、...)检查文件中是否存在多行字符串。
我想要一个包含几行(纯行而不是模式)的文件,它应该存在于另一个文件中,并创建一个命令(序列)来检查它是否存在。如果grep 可以接受任意多行模式,我会使用类似于
grep "`cat contentfile`" targetfile
与 grep 一样,我希望能够检查命令的退出代码。我对输出并不感兴趣。实际上,从那时起,我就不必通过管道传输到 /dev/null 了。
我已经搜索过提示,但找不到能提供任何好的搜索结果的搜索。有How can I search for a multiline pattern in a file?,但那是关于模式匹配的。
我找到了pcre2grep,但需要使用“标准”*nix 工具。
例子:
内容文件:
line 3
line 4
line 5
目标文件:
line 1
line 2
line 3
line 4
line 5
line 6
这应该匹配并返回 0,因为在目标文件中找到了内容文件中的行序列(以完全相同的顺序)。
编辑:抱歉,在此问题的先前版本中不清楚“模式”与“字符串”比较以及“输出”与“退出代码”。
【问题讨论】:
-
你在 Linux 上吗?还是您需要 MacOS/BSD 兼容性?
-
perl -0777 -pe 'exit 0 if s/'"$(cat patternfile)"'//; exit 1' targetfile? -
@Cyrus Works,至少对于我刚刚进行的一些简单测试。请把它变成一个答案。
-
如果patternfile 包含
/则不起作用。我敢肯定还有更好的解决方案。
标签: awk grep multilinestring