我正在尝试使用sed在一百多个文件中用“/ tools / common / test / HATS”替换字符串“/ net / origin / devdata1 / slin”的.prm文件中的每个匹配项。我认为我遇到了for循环的正确语法问题,循环遍历目录中的不同文件(/ home / AutoTest),以及我需要什么/作为命令行参数。提前谢谢。
OLD="/net/origin/devdata1/slin"
NEW="/toolscommon/test/HATS"
DIR="/home/AutoTest"
for f in $DIR
do
cp $f $f.bak
sed 's+$OLD+$NEW+g' $f.bak > $f
[ -f "$f" ]
rm -f $f.bak
done
答案 0 :(得分:0)
尝试:
old="/net/origin/devdata1/slin"
new="/toolscommon/test/HATS"
dir="/home/AutoTest"
sed -i "s+$old+$new+g" "$dir"/*
sed -i
将就地更新文件。
此外,最佳做法是为shell变量使用较低或混合大小写的名称。系统为其变量使用全大写字母名称,您不希望意外覆盖其中一个。
如果old
或new
包含任何sed-active字符,则存在潜在危险。如果是这样,任意文件都可能被删除或损坏。
old="/net/origin/devdata1/slin"
new="/toolscommon/test/HATS"
dir="/home/AutoTest"
awk -i inplace -v old="$old" -v new="$new" '{gsub(old, new)} 1' "$dir"/*
由于awk将old
和new
视为数据而非代码,因此比sed版本更安全。