Использование или в многострочном замене sed
Я запутался в кажущейся простой части 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 будет обрабатывать это, но я получил следующий вывод:
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:~$
Так чего мне не хватает? почему или в последнем седе останавливает замену новой строки?
заранее спасибо
2 ответа
Вы хотите написать
sed '/\(Allowed\|Blocked\|Modified\)/{N;s/\n/ /;}'
:)
На всякий случай мой многострочный поиск sed на этот раз был успешно остановлен http://www.grymoire.com/Unix/Sed.html.:)