Sed问题-替代命令中的错误标志:'#'

时间:2018-06-25 13:12:44

标签: bash shell unix sed

我正在由我的团队继承的Mac中运行脚本,它具有一些替换代码,这些代码似乎无法正常运行。我尝试了各种替换字符,例如%,\等,但似乎无济于事。有人可以让我知道我还应该改变什么。

脚本运行如下

./test.sh /Users/Apple/Test_Folder/ 425323 C6C7CB 425363 425363 425363 666666 666666 425363 425363 666666 425363 425363 a0a9b1 687582 a0a9b2

脚本(test.sh)内部的问题是此 for循环

for f in "$1"/*.svg;
do
  sed -i '' 's\#000002\#'"$2"'/g;s\#000003\#'"$3"'/g;s\#000004\#'"$4"'/g;s\#000005\#'"$5"'/g;s\#000006\#'"$6"'/g;s\#000007\#'"$7"'/g;s\#000008\#'"$8"'/g;s\#000009\#'"$9"'/g;s\#000010\#'"$10"'/g;s\#000011\#'"$11"'/g;s\#000012\#'"$12"'/g;s\#000013\#'"$13"'/g;s\#000014\#'"$14"'/g;s\#000015\#'"$15"'/g;s\#000016\#'"$16"'/g' $f
done

我得到的错误是 sed:1:“ s%#000002%#425323 / g; s%#...”:替换命令中的错误标志:'#'

有指针吗?

谢谢, 拉姆

1 个答案:

答案 0 :(得分:1)

重新格式化,以便于阅读,查找和编辑。 使用双引号作为脚本定界符,因此您不需要那么多变通办法。

for f in "$1"/*.svg;
do
  sed -i "
    s/#000002/#$2/g;
    s/#000003/#$3/g;
    s/#000004/#$4/g;
    s/#000005/#$5/g;
    s/#000006/#$6/g;
    s/#000007/#$7/g;
    s/#000008/#$8/g;
    s/#000009/#$9/g;
    s/#000010/#$10/g;
    s/#000011/#$11/g;
    s/#000012/#$12/g;
    s/#000013/#$13/g;
    s/#000014/#$14/g;
    s/#000015/#$15/g;
    s/#000016/#$16/g;
  " $f
done

如果您对抽象很不满意,则可以尝试这样的操作,但是请确保对它进行大量测试...

for s in $(seq 2 16)
do  n="$(printf "%06d" $s)"
    script="$script s/#$n/#\${$s}/g; "
done
for f in "$1"/*.svg;
do  eval " sed -i \" $script \" \"$f\" "
done
相关问题