我想替换这个
<property name="sourceUrl" value="file://D:/Uploaded Files?move=../../backup&include=.*.ok"/>
用这个
<property name="sourceUrl" value="file:///tmp/ETL-Files?move=../../backup&include=.*.ok"/>
我正在按照一种方法首先找到行号,然后用所需的文本替换该行,但由于行的开头存在<
,因此不会发生这种情况。
grep -n ^<property name="sourceUrl" value= etl-job-context.xml
我该如何解决这个问题,还是有更好的方法?
答案 0 :(得分:1)
您可以使用sed。
sed 's~\(<property *name="sourceUrl" *value="\)[^?]*~\1file:///tmp/ETL-Files~g' file
Basic sed使用Basic Regular Expression引擎进行匹配。在BRE \(..\)
被称为捕获组。因此,这将捕获从属性标记到value参数的所有字符。最后?
的剩余字符与[^?]*
匹配,这意味着匹配除?
之外的所有字符,零次或多次。
Sed使用一些特殊的字符作为分隔符。这里我使用了~
,因为替换字符串包含/
斜杠。替换中的\1
指的是由组索引1捕获的字符。以下字符将在捕获的字符旁边加上。请注意,匹配的字符会在替换期间自动删除。