【发布时间】: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
我需要在目录中找到的所有“setenv.csh”文件中找到“BATCH NO”行,并且 1)删除线
或
2) 将其替换为 BATCH YES
或
3) 注释掉该行(在“BATCH NO”之前添加“#”)
注意:“BATCH NO”行只在 setenv.csh 中找到
我认为需要 sed 命令。请帮忙。
【问题讨论】:
标签: unix sed replace scripting
我无法找出一个单一的解决方案。要搜索文件,您可以执行以下操作:
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
}
【讨论】:
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 的样子。