On Thu, Jul 21, 2016 at 08:00:44AM -0400, bruce wrote:
Hey guys..
Sed question.. should be simple, but after stack/net searches, lots or
trials.. can't seem to get it..
I've got a case
foo('txt')
foo("txt")
I'd like to have
foo('/dir1/txt')
foo("/dir1/txt")
Now. I do a simple sed search/replace if it just focuses on the txt, but
crafting a sed that uses the entire input as a search due to the parens
'()' is a bit painful! Doing the sed using the \( for the ( wasn't quite
successful!
for just the txt..
sed -i 's/'txt'/'dir1/txt'/' *files.dat
sed -i 's/"txt"/"dir1/txt"/' *files.dat
these work...
any thoughts on how to handle the parens would be cool!
just irks me that I couldn't see what I missed.
Two more possibilities (the short output lines were unchanged):
# search for entire string, replace only txt
$ sed '/foo(.txt.)/s,txt,/dir/txt,' tst.txt
foo('/dir/txt')
bar('txt')
foo('bar')
foo("/dir/txt")
bar("txt")
foo("bar")
# capture unchanging parts as \1 and \2 using grouping \( & \)
$ sed 's,\(foo(.\)txt\(.)\),\1/dir/txt\2,' tst.txt
foo('/dir/txt')
bar('txt')
foo('bar')
foo("/dir/txt")
bar("txt")
foo("bar")
--
Jon H. LaBadie jonfu(a)jgcomp.com