2015-08-23 2 views
-1

Мне нужно немного помочь продолжить шаблон в следующей строке при использовании «sed». Он бросает он не может прочитать файл для всех шаблона (кроме первого)Как продолжить шаблоны в следующей строке при использовании sed?

cat server.xml | sed -E 's|(jndiName=")[^/]*(/jdbc/WorklightDS")|\1clsapp\2|' \ 
         's|(worklightlib_)[^/]*(")|\1clsapp\2|' \ 
         's|(libraryRef=")[^/]*(/)|\1clsapp\2|' \ 
         's|(jndiName=")[^/]*(/jdbc/WorklightReportDS)|\1clsapp\2|' \ 
         's|(resource.dir}/)worklightconsole(/lib")|\1clsapp\2|g' 

Я прочитал, что «\» обратный слэш поможет нам продолжить рисунок на следующей строке.

Но, к сожалению, она не работает, как ожидалось, и я работаю на RHEL 6.5 и интересно знать решение

Примечание: Я был в состоянии заменить значение, следуя другой механизм.

Мой входа:

<dataSource jndiName="worklightconsole/jdbc/WorklightReportsDS" transactional="false"> OUTPUT ----> <dataSource jndiName="clsapp/jdbc/WorklightReportsDS" transactional="false"> 
+0

Я могу предвидеть, что у вас будет куча ошибок, если вы попытаетесь разобраться с xml-файлом, используя регулярное выражение. – HuStmpHrrr

ответ

2

Лучше всего начать с малой и простой операцией, прежде чем строить до комплекса, а когда сложная операция не имеет смысл отступить к простому.

В этом случае, если мы отступаем к этому:

echo apple | sed -E 's|a|A|' \ 
        's|e|E|' 

мы видим, что проблема не решена, и если мы дальше отступать к этому:

echo apple | sed -E 's|a|A|' 's|e|E|' 

мы обнаруживаем, что проблема не имеет ничего делать с продолжением шаблонов на следующую строку с обратной косой чертой. Проблема в том, что вы не можете объединять команды вместе. Я предлагаю это:

echo apple | sed -E -e 's|a|A|' -e 's|e|E|' 

Это работает, и так делает это:

echo apple | sed -E -e 's|a|A|' \ 
        -e 's|e|E|' 

и теперь вы можете создать резервную копию на свой комплексный случай.