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

sed in AIX script do not work with special chars

我创建了一个生成 HTML 代码的脚本。 在脚本的末尾,我需要将 table 中的某些单词加粗来突出显示它们。

所以我需要在代码中替换每个实例 单词 经过 要么 字

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

不幸的是,我尝试使用 sed 命令但没有成功。

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

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

PS:也尝试过使用 awk ...但是对于变量,这真的很痛苦...

编辑:这是我为大家提供帮助的确切代码。 code_list.txt 包含代码描述行列表。

 for y in code_list.txt
 do
      CODE=$(echo $y | cut -f1 -d-)
      awk -v code="$CODE" '{if(match([=11=],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

awk -vcode="$CODE" '{if(match([=10=],code)){gsub(code,"<b>"code"</b>")}} 1' page.html > newpage.html

假设有一个变量 $CODE

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

如果

,你的想法没有理由行不通
  • 你使用 " 而不是 '

  • $CODE 表达式中没有 @编辑:也没有换行符)(将 / 替换为 @)

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

您的解决方案的问题是引号,而且 sed 正则表达式分隔符 / 也被使用 在您的替换表达式 中,如 </b>

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

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

cp page.html  newpage.html
while read var
do
    mv newpage.html newpage1.html
    sed -e "s@$var@<b>$var</b>@g" newpage1.html > newpage.html
    # optionally rm newpage1.html
done < code_list.txt