【问题标题】:Unix: Find a specific line within files in a directory and comment/replace/remove that lineUnix:在目录中的文件中查找特定行并注释/替换/删除该行
【发布时间】:2019-03-10 07:16:09
【问题描述】:

我需要在目录中找到的所有“setenv.csh”文件中找到“BATCH NO”行,并且 1)删除线

2) 将其替换为 BATCH YES

3) 注释掉该行(在“BATCH NO”之前添加“#”)

注意:“BATCH NO”行只在 setenv.csh 中找到

我认为需要 sed 命令。请帮忙。

【问题讨论】:

    标签: unix sed replace scripting


    【解决方案1】:

    我无法找出一个单一的解决方案。要搜索文件,您可以执行以下操作:

    find . -iname 'setenv.csh' 
    

    然后,您可以使用以下功能将其替换为BATCH YES

    update () {
      out=$(echo $1 | sed 's/.csh/.patch.csh/g')
      cat $1 | sed 's/BATCH NO/BATCH YES/g' > $out
      mv $out $1
    }
    

    【讨论】:

    • 1) out=$(echo $1 | sed 's/.csh/.patch.csh/g') 应该是 out="${1%csh}patch.csh",2) cat $1 | sed 's/BATCH NO/BATCH YES/g' > $out mv $out $1 应该是 sed 's/BATCH NO/BATCH YES/g' "$1" > "$out" && mv "$out" "$1"。您还应该将local out 作为函数的第一行。虽然有更简单的方法,但让我们看看 OP 发布后minimal reproducible example 的样子。
    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2019-08-16
    • 2012-02-13
    • 2018-02-03
    • 2020-07-25
    • 2015-10-06
    相关资源
    最近更新 更多