Unix sed-使用特定ID更改HTML标记内的内容

Unix sed-使用特定ID更改HTML标记内的内容,html,bash,unix,sed,Html,Bash,Unix,Sed,我有一个包含以下内容的文件: <h1 id="name">John Smith</h1> <h2 id="customer-id">192238</h2> <h3 id="current-date">Thu 13 Apr 2017</h3> 如何使用sed根据标记id仅替换标记内的内容 在伪代码中: 在文件中查找匹配的ID 在ID名称后面找到右括号> 更换所有部件,直到开口支架需要澄清预期输出。 您可能需要类似于gnu s

我有一个包含以下内容的文件:

<h1 id="name">John Smith</h1>
<h2 id="customer-id">192238</h2>
<h3 id="current-date">Thu 13 Apr 2017</h3>
如何使用sed根据标记id仅替换标记内的内容

在伪代码中:

在文件中查找匹配的ID 在ID名称后面找到右括号>
更换所有部件,直到开口支架需要澄清预期输出。 您可能需要类似于gnu sed的功能:

cat <<EOF >file1
<h1 id="name">John Smith</h1>
<h2 id="customer-id">192238</h2>
<h3 id="current-date">Thu 13 Apr 2017</h3>
EOF

id="customer-id"
sed -r "/id=\"$id\"/ s/^<.[^>]*>/FOO/" file1
#Output
<h1 id="name">John Smith</h1>                                                                                                                                                   
FOO192238</h2>                                                                                                                                                                  
<h3 id="current-date">Thu 13 Apr 2017</h3>
或者可能:

sed -r "/id=\"$id\"/ s/^<.[^>]*>/<FOO>/" file1
#Output of second line:
<FOO>192238</h2> 
sed -r "/id=\"$id\"/ s/(^<.*id=)[^>]*>/\1\"FOO\">/" <file1
#Output of second line:
<h2 id="FOO">192238</h2>
或者可能:

sed -r "/id=\"$id\"/ s/^<.[^>]*>/<FOO>/" file1
#Output of second line:
<FOO>192238</h2> 
sed -r "/id=\"$id\"/ s/(^<.*id=)[^>]*>/\1\"FOO\">/" <file1
#Output of second line:
<h2 id="FOO">192238</h2>

最好提供一个预期输出的示例。常规HTML不能用正则表达式解析。当且仅当HTML由自己控制的工具生成时,才可以使用正则表达式。必须同时定义输入格式和预期输出。请参阅user@Quentin.com的评论和预期输入。无法使用正则表达式解析常规HTML。当且仅当HTML由自己控制的工具生成时,才可以使用正则表达式。@AlexP特定的正则表达式似乎适用于OP给出的示例输入文件。如果文件更复杂,则这些解决方案可能无法正确工作。我已经在我的答案的最开始包括了预期的输入文件。谢谢,这接近于我最后所做的。我用过:sed-I-e s/customer-id.>.*但对我的usecase@Anurope欢迎如果您建议什么是预期输出,我们可以微调所需的正则表达式。