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