1

我有以下 html,我想<p> Text </p>根据我的 shell 脚本中的 var 更改更改部分。

<div id="demo"><p> Text </p></div>

我一直在尝试使用以下功能,但它似乎不起作用,而且我需要它来获取更改<p> Text </p>部分中的任何内容,因为它会定期更改

fnChangeTxt()
{
        sed -i 's/<div id="'$1'"><p>*.*</<div id="'$1'"><p>'$2'</' /var/www/html/alarm.html
}

调用函数

fnChangeTxt 'demo' 'Next'
4

3 回答 3

1

你需要改变你的报价。为了便于阅读,我建议对s命令使用不同的分隔符 - 一个不太可能出现在您正在修改的文本中的分隔符。这将使读者不太可能因为在使用 HTML 的东西中看到奇怪位置的斜线而感到困惑。

fnChangeTxt() 
{
     sed -i "s|<div id=\"$1\"><p>.*<|<div id=\"$1\"><p>$2<|" /var/www/html/alarm.html;
}
于 2012-06-11T13:46:15.623 回答
0

对于初学者来说,单引号将防止用提供的输入替换变量。

其次,您只.*需要匹配“一切”。(实际上“任何字符的出现次数为 0 次”)

于 2012-06-11T10:26:30.120 回答
0

sed真的不需要:

#!/bin/bash

new='some stuff'

while read
do
    echo ${REPLY/<p>*<\/p>/<p> $new </p>}

done << '__END__'
<div id="demo"><p> Text </p></div> 
<div id="demo"><p> Text </p></div> 
__END__

给出:

<div id="demo"><p> some stuff </p></div>
<div id="demo"><p> some stuff </p></div>

用您的文件名替换此处的文档。

于 2012-06-11T11:36:39.377 回答