GREP SED如何搜索两行的模式跨度?

GREP SED如何搜索两行的模式跨度?,sed,awk,grep,find,Sed,Awk,Grep,Find,解决方案 初始解 找到-类型f-exec sed-i:a;N、 美元!文学士;s/\n//g'{}+|grep-l“672.15687489” 初始帖子: 我想知道如何在文件中搜索模式。但问题是这个模式被分成两行,我不知道模式被分成了哪一部分 例如: The pattern: _"672.15687489"_ 但是,在文件中可以是以下几个选项之一: 672.15\n687489 672.156\n87489 672.1568\n7489 672.15687\n489 我不在乎模式是

解决方案

初始解

找到-类型f-exec sed-i:a;N、 美元!文学士;s/\n//g'{}+|grep-l“672.15687489”

初始帖子:

我想知道如何在文件中搜索模式。但问题是这个模式被分成两行,我不知道模式被分成了哪一部分

例如:

The pattern:  _"672.15687489"_
但是,在文件中可以是以下几个选项之一:

672.15\n687489

672.156\n87489

672.1568\n7489

672.15687\n489


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

感谢您提供的搞笑的sed | grep“解决方案”:

但实际上,只需使用awk即可。这是一个GNU awk解决方案,它不会更改原始文件,不需要多个命令和管道,也不需要詹姆斯·邦德解码环来理解字母和标点符号的神秘组合:

$ 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解决方案更清晰。

可能重复的解决方案请将其作为您自己问题的答案发布,而不是编辑该问题。如果文件包含672x15687489(其中有一个
x
,您在其中编写
),是否要查看文件名?您的
grep
将选择该字符,以及任何其他包含任何其他字符的字符串,以代替
,因为点是元字符。不匹配发生的可能性很低,甚至不存在,所以这不是什么大问题,但是如果你真的想把点作为第四个字符,你必须用
\.
[.]
grep
模式中查找它。不要在你的帖子中编辑答案,只保留问题。只需接受引导你找到解决方案的答案。如果你有什么要补充的,可以发表评论,也可以在你接受的答案的基础上发表你自己的答案。
$ cat file
foo
672.15
687489
bar
$ gawk -v RS='\0' '{gsub(/\n/,"")} /672.15687489/{print FILENAME; exit}' file
file