sed反斜杠

时间:2012-12-20 17:59:45

标签: url sed

我有以下内容。我正在使用克拉分隔文本文件中的值替换html中的某些字段。

while  IFS=^ read col1 col2 col3 col4 col5 col6
do
    echo $col1
      echo "HtmlFor$col1" >> "SiteHtml.txt"
      cat $FILENAME1 | sed  "s/var1/$col1/" | sed  "s/var2/$col2/"| sed  "s/var3/$col3/" | sed  "s/var4/$col4/" | sed  "s/var5/$col5/" >> "SiteHtml.txt"
      # | sed  "s/var3/$col3/" | sed  "s/var4/$col4/" | sed  "s/var5/$col5/" | sed  "s/var6/$col6/"
done

如果列中有反斜杠,我会收到错误。如果我试图用“/”来逃避它们,我仍然会收到错误。它只有在我删除它时才有效,我不能这样做。 我做错了什么?

2 个答案:

答案 0 :(得分:0)

你需要使用3个反斜杠来替换'sed'中的单个反斜杠。

示例:

echo "\\" | sed "s/\\\/replace/"

原因是:第一个\转义为第二个\,而作为参数传递,一旦在二进制参数内传递将类似于“s / \ / replace”,现在当程序解析字符串时\逃脱第三个\最终将字符串替换为'\'。

可能有很多事情出错,因为\可以逃脱。其中一件事可能会困扰你。

  1. 您的'\'旁边是 c,n 或我们在字符串中使用它时有意义的任何其他特殊字符
  2. 你是'字符串 $ col1 变量的最后一个字符,当sed解析字符串时,它会被忽略。
  3. 如果没有看到HTML被解析,我不能说太多。

    注意:这些并不是唯一可能会给您带来错误的内容,但您可以大致了解反斜杠如何影响sed中的字符串解析,希望您能找到解决方案。

    PS:希望你也知道在双引号之间传递的任何东西在传递它作为参数之前被shell的值替换,而在单引号之间传递的任何内容都不会被它取代值。

答案 1 :(得分:0)

这是另一个版本:

echo "\\" | sed "s [\] replace "