【问题标题】:Using or in multiline sed replacement在多行 sed 替换中使用或
【发布时间】:2011-02-19 01:00:58
【问题描述】:

我对 sed 的一个看似简单的部分感到困惑 - or 语句。我编写了以下 sed ,它解析一个事件文件,其中包含多个事件标记之间封装的事件,然后在每个事件的 1 行上打印每个事件的输出:

machinename:~$ sed -n "/<event/,/<\/event>/ {/<result/{s/.*result value=\" \(.*\)\"\/>.*/\1/g; p}; /<sender/ {s/.*phoneNo=\"\(.*\)\" country.*/\1/g; p}}" xmlEventLog_2010-02-05T16:40:55.xml | sed '/Allowed/{N;s/\n/ /;}'
Allowed +989350000100
Allowed +989350000209
Allowed +989350000002
Allowed +989350000002
Allowed +989350000100
Allowed +989350000209
Allowed +989350000002
Allowed +989350000002
machinename:~$

从上面的日志中有 8 个事件的结果都是允许的。现在的问题是可能有多个结果值。结果值可以是 Blocked Modified 或 Allowed。我认为第二个 sed 中的 (Blocked|Modified|Allowed) 会处理这个问题,但我得到了以下输出:

machinename:~$ sed -n "/<event/,/<\/event>/{/<result/{s/.*result value=\"\(.*\)\"\/>.*/\1/g; p}; /<sender/ {s/.*phoneNo=\"\(.*\)\" country.*/\1/g; p}}" xmlEventLog_2010-02-05T16:40:55.xml | sed '/(Allowed|Blocked|Modified)/{N;s/\n/ /;}'
Allowed
+989350000100
Allowed
+989350000209
Allowed
+989350000002
Allowed
+989350000002
Allowed
+989350000100
Allowed
+989350000209
Allowed
+989350000002
Allowed
+989350000002
machinename:~$

那么我错过了什么?为什么最后的 sed 中的 or 会停止换行符替换?

提前致谢

一个

【问题讨论】:

    标签: parsing shell sed multiline


    【解决方案1】:

    你想写

    sed '/\(Allowed\|Blocked\|Modified\)/{N;s/\n/ /;}'

    :)

    【讨论】:

      猜你喜欢
      • 2011-01-23
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 2018-11-16
      • 2010-11-16
      • 1970-01-01
      相关资源
      最近更新 更多