更新一组txt文件的shell脚本

更新一组txt文件的shell脚本,shell,Shell,我想使用shell或任何脚本修改myfolder中的所有txt文件,如下所示 test = data(x, y); 与 以及: test.value(f1, "directory_1/directory_2/directory_3/file"); 与 将sed与bash一起使用: for i in *.txt; do if [ -f $i ]; then sed -i 's!test = data(\s*x,\s*y)!test = data(z,x,y)!' "$i"

我想使用shell或任何脚本修改myfolder中的所有txt文件,如下所示

 test = data(x, y);

以及:

 test.value(f1, "directory_1/directory_2/directory_3/file");

将sed与bash一起使用:

for i in *.txt; do
  if [ -f $i ]; then
    sed -i 's!test = data(\s*x,\s*y)!test = data(z,x,y)!' "$i"
    sed -i 's!test.value(f1, "[^/]*/[^/]*\(/[^"]*\)");!test.value(f1, "\1");!' "$i"
  fi  
done
如果您的sed不是GNU,那么使用

cd myfolder
for FILE in *txt ; do
    sed 's/test = data(x, y);/test = data(z,x,y);/test.value(f1, "/s="[^/]*/[^/]*\(/[^/]*/[^/]*");\)$=\1=;' "$FILE" > "$FILE.tmp"
    mv "${FILE}.tmp" "$FILE"
done

无需运行两次
sed
。您可以使用
-e
选项将两个命令组合成一个命令,甚至可以仅使用
对它们进行分隔。对于
循环,
sed…*,不需要
。txt
for i in *.txt; do
  if [ -f $i ]; then
    sed -i 's!test = data(\s*x,\s*y)!test = data(z,x,y)!' "$i"
    sed -i 's!test.value(f1, "[^/]*/[^/]*\(/[^"]*\)");!test.value(f1, "\1");!' "$i"
  fi  
done
cd myfolder
for FILE in *txt ; do
    sed -i 's/test = data(x,\s*y);/test = data(z,x,y);/;/test.value(f1, "/s="[^/]*/[^/]*\(/[^/]*/[^/]*");\)$=\1=;' "$FILE"
done
cd myfolder
for FILE in *txt ; do
    sed 's/test = data(x, y);/test = data(z,x,y);/test.value(f1, "/s="[^/]*/[^/]*\(/[^/]*/[^/]*");\)$=\1=;' "$FILE" > "$FILE.tmp"
    mv "${FILE}.tmp" "$FILE"
done