我想替换这个
<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
我该如何解决这个问题,或者有更好的方法吗?
你可以使用 sed。
sed 's~\(<property *name="sourceUrl" *value="\)[^?]*~\1file:///tmp/ETL-Files~g' file
Basic sed 使用 Basic Regular Expression 引擎进行匹配。在 BRE \(..\)
中称为捕获组。因此,这将捕获从属性标记到值参数的所有字符。并且 ?
之前的剩余字符被 [^?]*
匹配,这意味着匹配除 ?
之外的任何字符,零次或多次.
Sed 使用一些特殊字符作为分隔符。这里我使用了 ~
因为替换字符串包含 /
斜线。替换中的\1
指的是group index 1捕获的chars,后面的chars会追加到捕获的chars后面。请注意,匹配的字符在替换过程中会自动删除。
我是一名优秀的程序员,十分优秀!