【问题标题】:GNU sed excludes unmatched linesGNU sed 排除不匹配的行
【发布时间】:2023-03-13 01:31:01
【问题描述】:

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

下面是命令

sed -e "s/INSERT/UPDATE/w  output.txt" "input.txt"

但上述命令的问题是,它不会写入不匹配的行。即如果未找到要搜索的文本的行,则该行不会写入 output.txt 文件中。

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

如何做到这一点?

【问题讨论】:

    标签: file-io sed gnu


    【解决方案1】:

    使用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 是两个命令替换和(无条件)写入。
    • 我对@9​​87654328@一无所知,但ProcessInfo对象肯定允许你写sh -c "sed ... > output.txt"
    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2017-03-11
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    相关资源
    最近更新 更多