7

我经常使用 grep 并且熟悉它返回匹配行(默认情况下)和不匹配行(使用 -v 参数)的能力。但是,我希望能够一次 grep 文件以分隔匹配和不匹配的行。

如果这不可能,请告诉我。我意识到我可以在 perl 或 awk 中轻松做到这一点,但我很好奇 grep 是否可能。

谢谢!

4

3 回答 3

9

如果它不必是 grep - 这是基于模式的单遍拆分 - 模式找到 > 文件 1 模式未找到 > 文件 2

awk '/pattern/ {print $0 > "file1"; next}{print $0 > "file2"}' inputfile
于 2013-04-03T15:28:39.560 回答
1

我遇到了完全相同的问题,为此我编写了一个小的 Perl 脚本 [1]。它只接受一个参数:regexto grep input on。

[1] https://gist.github.com/tonejito/c9c0bffd75d8c81483f9107c609439e1

它逐行读取STDINregex并检查给定的匹配行到STDOUT,不匹配到STDERR

我这样做是因为这个工具位于管道的中间,并且我使用 shell 重定向将文件保存在它们的最终位置。

于 2018-04-23T21:25:27.450 回答
0

第 1 步:读取文件

第 2 步:用新行替换空格并将结果保存在临时文件中

第 3 步:仅从临时文件中获取包含“_”的行并将其保存到 multiwords.txt

第 4 步:从临时文件中排除包含“-”的行,然后将结果保存到 singlewords.txt

第五步:删除临时文件

  cat file | tr ' ' '\n' > tmp.txt | grep '_' tmp.txt > multiwords.txt | grep -v '_' tmp.txt > singlewords.txt | find . -type f -name 'tmp.txt' -delete
于 2019-09-22T11:23:46.610 回答