如何将匹配的行重定向到一个文件,并将不匹配的行重定向到另一个文件?

如何将匹配的行重定向到一个文件,并将不匹配的行重定向到另一个文件?

是否有脚本/程序/实用程序可以以优化的方式满足以下要求?

someCommand |
   tee >(grep "pattern" > LinesWhichMatch) |
   grep -v "pattern" > LinesWhichDoesNotMatch

答案1

你可以用awk它。

command | awk '{ if (/pattern/) { print > "match" } else { print > "nomatch" } }'

答案2

下面是一个sed示例:
注意:每次运行脚本时,sed 的w命令都会覆盖现有文件,但前提是触发特定的写入命令;因此rm

rm -f file-{yes,not}  
sed -ne '/pattern/bY; w file-not' -e 'b; :Y; w file-yes' file

答案3

您可以在 awk 中附加文件:

awk '{if (/pattern/) print >>"matched"; else print >>"unmatched"; }

或更短:

awk '{print >>(/pattern/?"matched":"unmatched")}'

相关内容