我已阅读帖子grep all characters including newline,但我没有使用XML,因此我的Linux命令略有不同。
我有以下数据:
cat file.txt | grep -o '<tag.*tag>\|^--.*'
使用此命令<tag>Example line 1</tag>
我得到:
<tag>Example line 1</tag>
<tag>Example line 2</tag>
但是,我希望输出为:
<tag
如何匹配字符串之间的任何内容,包括换行符?
注意:我需要使用tag>
和{{1}}作为字符串,因为其他文件可以在行之间包含多个标记和文本。将更新样本数据以显示。
答案 0 :(得分:1)
gnu-awk
使用</tag>
作为记录分隔符,这样做更容易:
awk -v RS='</tag>' 'RT {gsub(/\n/, ""); print $0 RT}' file
<tag>Example line 1</tag>
<tag>Example line 2</tag>
答案 1 :(得分:0)
考虑这个测试文件:
$ cat file2
Example line 0</span>
<tag>Example line 1</tag>
<span>Example line 1.5</span>
<tag>
Example line 2
</tag>
Example line 3
<span>Example line 4</span>
这会产生你想要的输出(需要GNU sed):
$ sed -z 's|\n||g; s|</tag>|&\n|g; s|[^\n]*<tag>|<tag>|; s|\n[^\n]*<tag>|\n<tag>|g; s|\n[^\n]*$|\n|' file2
<tag>Example line 1</tag>
<tag>Example line 2</tag>
限制:请注意,使用非专业工具处理类似XML的文本可能非常脆弱。