[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: sed substitution that contains forward slash



Craig White wrote:
On Tue, 2009-03-31 at 20:16 -0400, Todd Zullinger wrote:
Craig White wrote:
subtitle...fun with sed

I have a list of changes to make to a file...

dc              rc
-------------   -------
15T6145V        DELETED
NATL19502       DELETED
Q10MR11/FL12V   DELETED
Q1500T3/CL120   DELETED

and things work until I get to the 3rd item which has a forward
slash and it fails to substitute with commands like below...

sed -i "s%${dc}%${rc}%g" ARsalesorderdetails.csv
and
sed -i "s/${dc}/${rc}/g" ARsalesorderdetails.csv

The latter producing error on screen...
sed: -e expression #1, char 17: unknown option to `s'

While the former simply doesn't complain but doesn't make the change
either.
Hmm, it should work using a delimeter other than '/' or escaping the
'/'.  Escaping the '/' is a bit more of a pain than just changing
delimeters, as long as you know that whatever delimeter you pick won't
be in the strings you are substituting.

It seems to work for me:

$ dc="Q10MR11/FL12V"; rc=DELETED; echo "dc=${dc}"; echo "rc=${rc}"; \
  echo "This is some Q10MR11/FL12V text." | sed "s%${dc}%${rc}%g"
dc=Q10MR11/FL12V
rc=DELETED
This is some DELETED text.
----
Interesting...using the vertical bar as the regex separator worked where
the % failed for me.

Thanks

Craig

You should be able to do:
(so as long as ' is not part of the input stream)

sed -i 's%'${dc}'%'${rc}'%g' ARsalesorderdetails.csv

I personally use delimiters as # or | depending
on the input string stream


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]