如何按多行而不是逐行读取

如何按多行而不是逐行读取

我发现在我的代码中,如果整个代码基于该行,我可以修改该行。例子:<p class="example">this is an example Happy Holidays</p>。但是,如果</p>标记位于第二行,则代码将传递该行。

在行结束之前检测某些标签的最佳方法是什么?

答案1

简单的答案是:不使用 shell 解析 XML。请改用 XML 解析器,例如 Perl 的众多解析器之一:XML::解析器,XML::简单或任何其他语言。对于 HTML,HTML::解析器是一个选择(如果我们继续使用 Perl)。

如果你想使用bash,你可以使用read内置函数和循环来玩一下。

答案2

文本实用程序在行上工作(文本行是(不太长的)以换行符结尾的非 NUL 字符序列)。awk是一个标准实用程序,可以告诉它在记录上工作,并用换行符以外的其他东西分隔,这就是为什么要awk谈论记录代替线

例如,您可以>使用记录分隔器。如:

awk -v RS='>' ...

另一种方法是将要用作记录分隔符的字符(对于除 之外的其他工具awk)与换行符交换:

... |
  tr '\n>' '>\n' |
  sed ... |
  other-text-utility... |
  tr '\n>' '>\n'

这些假设您要修改的内容不包含嵌套的 HTML 标记,因为它们会开始新记录。

那就是替换

相关内容