regex - sed 在换行符中匹配模式

标签 regex xml bash awk sed

这是我的输入:

<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/

相关文章:

java - 解析 xml 名称-值字段

xml - 有没有办法将 flex 中的标签映射到多个目录中的组件?

bash - 如何从 bash 函数中打印换行符

php - 如何在 PHP 中使用 RegexIterator

regex - Linux sed - 需要帮助来弄清楚为什么模式匹配不起作用

c# - 正则表达式从 img 标签获取 src 值

python - 在线求职很乏味。帮我自动化

java - Android 开发 将 XML 按钮链接到 Java

Bash 和 (graphviz) 点输出重定向

bash - 如何测试一个变量以bash中的字符串开头?