我经常使用grep并且熟悉它能够返回匹配的行(默认情况下)和不匹配的行(使用-v参数)。但是,我希望能够将文件grep一次以分隔匹配和不匹配的行。
如果无法做到,请告诉我。我意识到我可以在perl或awk中轻松地做到这一点,但是如果有可能用grep,我很好奇。
谢谢!
答案 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