2010-05-13 92 views
1

我很困惑sed的一个看似简单的部分 - 或声明。我写下面的sed,它解析与事件代码之间封装多个事件的事件文件,然后打印在每1行的每个事件的输出:使用或在多行sed替换

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个事件日志中的所有使用结果在允许。现在麻烦是可能有多个结果值。结果值可能是“阻止修改”或“允许”。我认为在第二个SED(阻止|修改|允许)将处理这个,但我得到了以下输出:

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会停止换行呢?

在此先感谢

一个

回答

2

你想写

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

:)

+0

谢谢。有时候另一双眼睛可以看到明显的 – amadain 2010-05-13 11:07:24