AIX脚本中的sed不适用于特殊字符

时间:2016-06-04 15:49:56

标签: unix sed sh aix

我创建了一个生成HTML代码的脚本。 在脚本的最后,我需要通过使它们变粗来突出显示表中的一些单词。

所以我需要在代码中替换每个实例 字 通过 WORD 的 要么 WORD

当然,WORD存储在变量$ CODE中以使这更加困难。

我试图不幸地使用sed命令但没有成功。

 sed -e 's/$CODE/<b>$CODE</b>/g' page.html > newpage.html

我还尝试使用双引号,在/之前使用转义字符,引用和双引号的多种组合,作为分隔符,总是没有成功。 如果你们中的任何一个人能指出我的解决方案,我会非常感激。

PS:也尝试过使用awk ......但是有了变量,它真的很痛苦......

编辑:以下是我帮助大家的确切代码。 code_list.txt包含CODE描述行列表。

 for y in code_list.txt
 do
      CODE=$(echo $y | cut -f1 -d-)
      awk -v code="$CODE" '{if(match($0,code)){gsub(code,"<b>"code"</b>")}} 1' $SCRIPTS/html/daily_running_jobs.html > $SCRIPTS/html/daily_running_jobs_highlight.html
      mv $SCRIPTS/html/daily_running_jobs_highlight.html $SCRIPTS/html/daily_running_jobs.html  
 done

B 2

2 个答案:

答案 0 :(得分:2)

如果

,你的想法没有理由不起作用
  • 你使用&#34;而不是&#39;

  • $ CODE表达式中没有{{1>}(编辑:且没有换行)(@替换/

@

您的解决方案的问题是引用,并且sed正则表达式分隔符sed -e "s@$CODE@<b>$CODE</b>@g" page.html > newpage.html也在替换表达式中使用 ,如/

编辑 - 要从文件中替换的多个值

如果您有一个文件code_list.txt,其中所有要替换的字符串都是每行一个,请执行

</b>

答案 1 :(得分:0)

f

假设有一个变量 $ CODE

我们将它传递给awk变量,如果有匹配则替换