如何将匹配的行重定向到文件,将不匹配的行重定向到不同的文件?

bal*_*lki 13 grep text-processing tee

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

someCommand |
   tee >(grep "pattern" > LinesWhichMatch) |
   grep -v "pattern" > LinesWhichDoesNotMatch
Run Code Online (Sandbox Code Playgroud)

Chr*_*own 16

你可以用awk它。

command | awk '{ if (/pattern/) { print > "match" } else { print > "nomatch" } }'
Run Code Online (Sandbox Code Playgroud)


Pet*_*r.O 10

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

rm -f file-{yes,not}  
sed -ne '/pattern/bY; w file-not' -e 'b; :Y; w file-yes' file
Run Code Online (Sandbox Code Playgroud)


Mic*_*jer 6

您可以在 awk 中附加文件:

awk '{if (/pattern/) print >>"matched"; else print >>"unmatched"; }
Run Code Online (Sandbox Code Playgroud)

或更短:

awk '{print >>(/pattern/?"matched":"unmatched")}'
Run Code Online (Sandbox Code Playgroud)