【问题标题】:I want to pipe grep output to sed for input我想将 grep 输出通过管道传输到 sed 以供输入
【发布时间】:2020-06-16 20:35:30
【问题描述】:

我正在尝试将 grep 的输出通过管道传输到 sed,因此它只会编辑特定文件。我不希望 sed 在不更改的情况下对其进行编辑。 (更改修改日期。)

我用 grep 搜索并用 sed 写作。就是这样

我要改变的是破折号,不是普通类型,是特殊类型。 “-“ 是正常的。 “-”不正常


我目前拥有的代码:

sed -i 's/– foobar/- foobar/g' * ; perl-rename 's/– foobar/- foobar/' *'– foobar'*

抱歉,我没有经验。

【问题讨论】:

  • 欢迎来到 Stack Overflow。获取tour 并阅读How to Ask。您应该编辑您的问题以包含有关您的用例、示例输入、所需输出以及您尝试过的内容的更多详细信息。就目前而言,这里没有真正的问题。
  • 没有?我需要将 grep 与 sed 连接起来,这不是问题吗?对不起。
  • 不,I need to connect grep with sed 是一个陈述,而不是一个问题。您没有告诉我们您拥有的代码有什么问题(如果有的话),也没有就您需要帮助的问题(假设有问题)提出任何问题。如前所述,请参阅How to Ask
  • 如果您的问题是“如何连接 grep 和 sed?”,答案很可能是“使用管道”。您的帖子暗示问题远不止于此。你得到猜测作为答案是有原因的。

标签: bash sed grep


【解决方案1】:

您确定要实现什么目标吗?让我解释一下:

grep "string_in_file" <filelist> | sed <sed_script>

首先显示“string_in_file”,前面是文件名。
如果您在此启动sed,那么它只会在屏幕上显示sed-script 的结果,但不会更改文件本身。为此,您需要以下内容:

grep -l "string_in_file" <filelist> | sed <sed_script_on_file>

grep -l 显示了一些文件名,新的 sed_script_on_file 需要是一个脚本,读取文件并修改它。

【讨论】:

    【解决方案2】:

    感谢大家的帮助,很抱歉没有快速回复

    在对命令进行了一番摆弄之后,我明白了:

    grep -l 'old' * | xargs -d '\n' sed -i 's/old/new/'
    

    这应该只涉及包含old 的文件并保留所有其他文件。

    【讨论】:

      【解决方案3】:

      如果您的文件名不包含换行符,这可能是您尝试做的事情:

      grep -l -- 'old' * | xargs sed -i 's/old/new/'
      

      【讨论】:

        猜你喜欢
        • 2011-07-17
        • 2014-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多