2010-05-13 90 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