sed substitution that contains forward slash

Daniel B. Thurman dant at cdkkt.com
Wed Apr 1 00:38:48 UTC 2009


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




More information about the users mailing list