0

解决方案

初始解决方案

寻找 。-type f -exec sed -i ':a;N;$!ba;s/\n //g' {} + | grep -l "672.15687489"

初始帖子:

我想知道如何在文件中搜索模式。但是该模式跨越两行,我不知道该模式分为哪一部分。

例子:

The pattern:  _"672.15687489"_

但是,在文件中可能是以下几个选项之一:

672.15\n687489

672.156\n87489

672.1568\n7489

672.15687\n489

...

我不在乎模式是如何拆分的,我唯一想要的是具有该模式的文件的名称。

4

1 回答 1

2

谢谢你的搞笑 sed | grep“解决方案”:

sed -i ':a;N;$!ba;s/\n //g' {} + | grep -l "672.15687489"

但实际上,只需使用 awk。这是一个 GNU awk 解决方案,它不会更改您的原始文件,不需要多个命令和管道,并且不需要 James Bond 解码器环来理解字母和标点符号的神秘组合:

$ cat file
foo
672.15
687489
bar
$ gawk -v RS='\0' '{gsub(/\n/,"")} /672.15687489/{print FILENAME; exit}' file
file

您只需要知道将 RS 设置为 Null 字符会告诉 gawk 将整个文件作为单个记录读取。其他 awk 可能支持也可能不支持,但 GNU awk 支持。还有其他 awk 解决方案,所有这些都比发布的 sed+grep 解决方案更清晰。

于 2013-03-06T13:41:02.560 回答