我想在KornShell(ksh)中使用HP-UX上的sed
删除两个XML标记之间的文件中的所有换行符。我使用sed
得到了我想要的东西,除了当我将多行命令转换为单行(单行)时它失败了。
文件看起来像这样。
<NAME>
<FNAME>John</FNAME>
<LNAME>Doe</FNAME>
</NAME>
<NAME>
<FNAME>Jane</FNAME>
<LNAME>Doe</FNAME>
</NAME>
脚本中的以下命令
sed '/<NAME/,/<\/NAME/{
{H;x;s/\n[ ^I]*//;x;};
/<NAME/{s/[ ^I]*//;h;};
/<\/NAME/{x;p;};
d;}' xmlfile
给了我我想要的东西
<NAME><FNAME>John</FNAME><LNAME>Doe</FNAME></NAME>
<NAME><FNAME>Jane</FNAME><LNAME>Doe</FNAME></NAME>
然而,当我把它变成像
这样的单行时sed '/<NAME/,/<\/NAME/{{H;x;s/\n[ ^I]*//;x;};/<NAME/{s/[ ^I]*//;h;};/<\/NAME/{x;p;};d;}' xmlfile
失败并说
sed: There are too many '{'.
我不知道为什么,希望有人能告诉我错误信息的含义以及解决方法。不要传播可读性;这更多是出于好奇。
我想要使用它的实际文件相当大,约为15MB,每<TAG>
和</TAG>
之间约有250行,我将转换为一行。我选择了sed
,但我可以使用awk
或任何其他最好的工具换工作建议,但仍然想知道为什么我收到上述错误消息。