Bash 替换HTML中不匹配的左尖括号

Bash 替换HTML中不匹配的左尖括号,bash,awk,sed,Bash,Awk,Sed,我的问题是:如何找到带有不匹配左尖括号的行,并用它们的HTML等价物替换这些括号 输入示例: <dd> Pro 10g Flüssigkeit: 2g Wasserstoffperoxid <10% Tenside. ENTHÄLT: Sulfamidsäure,</dd> Pro 10g Flüssigkeit:2g Wasserstoffperoxide这可能足够好了: $ sed -E 's/<([^>]+<)/\&lt

我的问题是:如何找到带有不匹配左尖括号的行,并用它们的HTML等价物替换这些括号

输入示例:

<dd>
     Pro 10g Flüssigkeit: 2g Wasserstoffperoxid <10% Tenside. ENTHÄLT: Sulfamidsäure,</dd>


Pro 10g Flüssigkeit:2g Wasserstoffperoxide这可能足够好了:

$ sed -E 's/<([^>]+<)/\&lt;\1/g' file
<dd>
     Pro 10g Flüssigkeit: 2g Wasserstoffperoxid &lt;10% Tenside. ENTHÄLT: Sulfamidsäure,</dd>

$sed-E的/]+这可能足够好了:

$ sed -E 's/<([^>]+<)/\&lt;\1/g' file
<dd>
     Pro 10g Flüssigkeit: 2g Wasserstoffperoxid &lt;10% Tenside. ENTHÄLT: Sulfamidsäure,</dd>

$sed-E的/]+这是一个危险的建议,因为
sed
是逐行工作的,对于每一行,都有几种情况需要考虑:

可能只有小于字符,没有任何html标记:

<p>
    x < 10
</p>

x<10

在您的示例中,小于字符后面可能有一个html标记

<p> x < 10 </p>
x<10

小于字符可能位于html标记内

<img src="..." alt="Graph for x < 10">

它可能是一个很长的html标记,在后面的一行中关闭

<img
    src="..."
    alt="..."
>

我要做的是,首先假设只有前两个选项存在,然后使用如下方式:

sed -i.orig -r 's/<([^>]*($|<))/\&lt;\1/g' file.

sed-i.orig-r's/]*($|这是一个危险的建议,因为
sed
是逐行工作的,对于每一行,都有几个案例需要考虑:

可能只有小于字符,没有任何html标记:

<p>
    x < 10
</p>

x<10

在您的示例中,小于字符后面可能有一个html标记

<p> x < 10 </p>
x<10

小于字符可能位于html标记内

<img src="..." alt="Graph for x < 10">

它可能是一个很长的html标记,在后面的一行中关闭

<img
    src="..."
    alt="..."
>

我要做的是,首先假设只有前两个选项存在,然后使用如下方式:

sed -i.orig -r 's/<([^>]*($|<))/\&lt;\1/g' file.

sed-i.orig-r's/]*($|关于umlaute:我正在解析vcard(即普通ASCII文件),这时姓氏中一个看起来完全正常的'u'终止了我的awk脚本。我从未发现为什么会有数千个这样的vcard(其中许多包含umlaute和'ß',并且都来自同一来源)解析时没有任何问题,但这一个不起作用。因此…如果任何字符终止(或对awk脚本有任何其他不利影响),则您的awk脚本中存在一个简单的错误。否则不会发生这种情况。关于umlaute:我正在解析vCard(即普通ASCII文件)当一个姓氏中看起来完全正常的“ü”终止了我的awk脚本时。我一直不知道为什么成千上万的这些vCard(许多包含Umlaute和“ß”,并且都来自同一个源)被解析没有任何问题,但这一个不起作用。因此……如果有任何字符终止(或对其产生任何其他不利影响)你的awk脚本那么你的awk脚本中有一个简单的bug,否则就不会发生。