如何从grep中保存匹配和非匹配

时间:2013-04-03 13:50:24

标签: unix grep pattern-matching matching

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

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

谢谢!

3 个答案:

答案 0 :(得分:5)

如果它不必是grep - 这是基于模式的单遍分割 - 找到的模式>找不到file1模式> file2的

awk '/pattern/ {print $0 > "file1"; next}{print $0 > "file2"}' inputfile

答案 1 :(得分:1)

我遇到了完全相同的问题,我为此编写了一个小的Perl脚本[1]。它只接受一个参数: UPDATE Weather SET PercentError=ABS (ActualTemp - ForecastTemp) / ActualTemp * 100 grep 输入。

  

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

按行显示 STDIN 并检查给定的regex,匹配的行转到 STDOUT 并且不匹配转到 STDERR

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

答案 2 :(得分:0)

第1步:读取文件

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

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

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

第5步:删除临时文件

  cat file | tr ' ' '\n' > tmp.txt | grep '_' tmp.txt > multiwords.txt | grep -v '_' tmp.txt > singlewords.txt | find . -type f -name 'tmp.txt' -delete