i'm using sed in bash try replace strings matching:
compile 'com.test.*:*'
with:
compile 'com.test.*:+'
where * wildcard.
my file looks this, it's called moo.txt:
compile 'com.test.common:4.0.1' compile 'com.test.streaming:5.0.10' compile 'com.test.ui:1.0.7'
and want this:
compile 'com.test.common:+' compile 'com.test.streaming:+' compile 'com.test.ui:+'
i've tried use sed like:
sed -i -- "s/compile \'com.test.*:.*\'/compile \'com.test.*:+\'/g" moo.txt
but makes file like:
compile 'com.test.*:+' compile 'com.test.*:+' compile 'com.test.*:+'
any ideas how use wildcard in substitute field properly?
you matching things after com.test
don't print them properly.
so indeed matching something, not printing back. instead, printing literal .*
:
sed "s/compile \'com.test.*:.*\'/compile \'com.test.*:+\'/g" # ^^ ^^ # match print back? no
to so, capture pattern , print using backreference.
sed -e "s/compile 'com.test(.*):.*'/compile 'com.test\1:+'/g" # ^^^^ ^^ # catch print back! yes!
see repeating "compile..." much? means can extend capture beginning of line, since backreference print of back:
sed -e "s/^(compile 'com.test.*):.*'/\1:+'/g" # ^^^^^^^^^^^^^^^^^^^^^ ^^ # capture of print
note usage of -e
allow sed
capture groups (...)
. if didn't use -e
, should \(...\)
.
note escaping single quotes, while not necessary since inside double quotes.
Comments
Post a Comment