如何在HP-UX上将multiline sed转换为oneline sed

时间:2016-10-27 21:55:57

标签: xml sed pattern-matching hp-ux

我想在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或任何其他最好的工具换工作建议,但仍然想知道为什么我收到上述错误消息。

0 个答案:

没有答案