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
B²
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
我创建了一个生成 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
B²
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