Replacing a string having double slash using sed or awk in linux -
i wish replace
<property name="sourceurl" value="file://d:/uploaded files?move=../../backup&include=.*.ok"/> with
<property name="sourceurl" value="file:///tmp/etl-files?move=../../backup&include=.*.ok"/> i following approach first find line number , replace line desired text, not happening because of < present @ start of line.
grep -n ^<property name="sourceurl" value= etl-job-context.xml how can solve this, or there better approach?
you may use sed.
sed 's~\(<property *name="sourceurl" *value="\)[^?]*~\1file:///tmp/etl-files~g' file basic sed uses basic regular expression engine matching. in bre \(..\) called capturing group. capture chars exist property tag value parameter. , remaining chars ? matched [^?]*, means match char ?, 0 or more times.
sed uses special chars delimiters. here used ~ because replacement string contains / slashes. \1 in replacement refers chars captured group index 1. , following chars appednded next captured chars. note matched chars automatically removed during replacement.
Comments
Post a Comment