这是我的输入:
<array>
<string>extra1</string>
<string>extra2</string>
<string>Yellow
5</string>
注意:“黄色”和“5”之间有一个空格和换行符
我正在将它传送到 sed:
| sed -n 's#.*<string>\(.*\)</string>#\1#p'
我得到了输出:
extra1
extra2
我知道,因为 sed 从每个输入行的末尾去除换行符,所以换行符不在那里进行匹配 - 所以这说明了结果。我已阅读有关从缓冲区添加下一行的文章,但我无法弄清楚我需要在模式匹配中使用什么才能使其正常工作。
我想要的输出是:
extra1
extra2
Yellow 5
(以防万一,我使用的是 Mac,因此我需要它与 - 我认为 - sed 的 FreeBSD 变体一起使用。)
当然,如果其他工具更适合我想要实现的目标,我愿意接受建议!谢谢!
最佳答案
连接线并将它们分开:
tr -d "\n" < file| grep -o "<string>[^<]*</string>"|sed 's/<string>\(.*\)<\/string>/\1/'
关于regex - sed 在换行符中匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35278680/