在bash上更换sed

时间:2015-08-22 09:02:05

标签: regex bash sed

我有以下字符串

<dataSource jndiName="worklightconsole/jdbc/WorklightDS" transactional="false">

我想替换“worklightconsole”这个词。使用&#39; app&#39;所以输出看起来像下面

<dataSource jndiName="app/jdbc/WorklightDS" transactional="false">

我尝试了以下(以及其他一些选项)使用&#39; sed&#39;但无法使其发挥作用

sed -e 's/\<dataSource\ jndiName=\".*\//\dataSource\ jndiName=\"app\//g'

我得到的输出为

<dataSource jndiName="app/WorklightDS" transactional="false">

而不是替换“worklightconsole”这个词。它取代了#work; worklightconsole / jdbc&#39;与&#39; app&#39;

我做错了什么,以及&#39;。&#39;是什么意思。在sed?

1 个答案:

答案 0 :(得分:0)

使用GNU sed:

sed -E 's|(jndiName=")[^/]*(/jdbc/WorklightDS")|\1app\2|' file

替换“就地”:

sed -E -i 's|(jndiName=")[^/]*(/jdbc/WorklightDS")|\1app\2|' file

.:一次匹配任何字符

.*:匹配任何字符零次或多次