【发布时间】:2016-10-15 06:17:35
【问题描述】:
我有以下数据:
Example line 0</span>
<tag>Example line 1</tag>
<span>Example line 1.5</span>
--Hello Example line 1.7
<tag>
Example line 2
</tag>
--Hello Example line 2.7
<span>Example line 4</span>
使用这个命令awk -v RS='</tag>' 'RT {gsub(/.*?<tag>|\n/, ""); print "<tag>" $0 RT}'我得到:
<tag>Example line 1</tag>
<tag>Example line 2</tag>
但是,我希望输出是:
<tag>Example line 1</tag>
--Hello Example line 1.7
<tag>Example line 2</tag>
--Hello Example line 2.7
问题:
我只想知道如何添加“或”选项以匹配以--Hello 开头的任何行。在我的代码中实现的正确方法是什么?
其他选项:
或者,另一种选择是使用grep -o '<tag.*tag>\|^--.*',但我还需要找到一种匹配换行符的方法(如此处所问:Match Anything In Between Strings For Linux Grep Command)。
非常感谢任何帮助。
【问题讨论】:
-
您好@EdMorton,请注意。我也愿意接受其他解决方案:-)
-
好的,我发布了一个解决方案。顺便说一句,无论您认为
.*?是什么意思,您都错了,因为这只是 ERE 正则表达式的废话。如果您告诉我们您认为它会做什么,我们可以告诉您如何在 awk 中执行任何操作。