File io GNU sed排除不匹配的行

File io GNU sed排除不匹配的行,file-io,sed,gnu,File Io,Sed,Gnu,我正在使用GNU sed命令(GNU sed版本4.2.1)在文件中进行搜索和替换。 我希望输入文件保持完整,因此我使用sed的文件写入选项 下面是命令 sed -e "s/INSERT/UPDATE/w output.txt" "input.txt" 但上述命令的问题是,它不会写入不匹配的行。i、 e.待搜索文本所在的行如果未找到,则该行不会写入output.txt文件 我希望在output.txt中写入不匹配的行 如何实现这一点?使用w作为单独的命令,即: sed -e 's/INSER

我正在使用GNU sed命令(GNU sed版本4.2.1)在文件中进行搜索和替换。 我希望输入文件保持完整,因此我使用sed的文件写入选项

下面是命令

sed -e "s/INSERT/UPDATE/w  output.txt" "input.txt"
但上述命令的问题是,它不会写入不匹配的行。i、 e.待搜索文本所在的行如果未找到,则该行不会写入output.txt文件

我希望在output.txt中写入不匹配的行


如何实现这一点?

使用
w
作为单独的命令,即:

sed -e 's/INSERT/UPDATE/' -e 'w output.txt' input.txt
或者,如果您的
sed
支持它,您可以使用分号:

sed -e 's/INSERT/UPDATE/;w output.txt' input.txt
但是,如果您真的只想在文件中输出,请使用重定向:

sed -e 's/INSERT/UPDATE/' input.txt > output.txt

谢谢choroba,第一个选择奏效了。我知道第三个选项,但我不能使用它,因为c#不允许它通过ProcessInfo对象执行以提供重定向选项。只是为了解释发生了什么,表达式
s///w
精确地表示“替换成功时写入”,而
s//;w
是两个替代和(无条件)写入的命令。我对
c
一无所知,但ProcessInfo对象肯定允许您写入
sh-c“sed…”output.txt“