首页 > 解决方案 > 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%# ...”:替代命令中的错误标志:'#'

任何指针?

谢谢,拉姆

标签: bashshellunixsed

解决方案


重新格式化,使其更易于阅读、查找和编辑。使用双引号作为脚本分隔符,这样您就不需要这么多变通方法。

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

推荐阅读