1

私は、sed の一見単純な部分である or ステートメントと混同しています。イベントタグの間にカプセル化された複数のイベントを含むイベントファイルを解析し、各イベントの出力をそれぞれ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 つのイベントがあり、すべて結果が許可されています。問題は、複数の結果値が存在する可能性があることです。結果の値は、ブロック済み、変更済み、または許可済みです。2 番目の 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 が改行の置換を停止するのはなぜですか?

前もって感謝します

4

1 に答える 1

2

あなたは書きたい

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

:)

于 2010-05-13T10:43:06.617 に答える