在使用&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 :(得分:3)
最好在构建复合体之前先进行小而简单的操作,当复杂的操作失败时,最好退回到简单的操作。
在这种情况下,如果我们退缩到这一点:
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|'
现在您可以重新构建复杂的案例。