Mehmet,
Be aware that there are special characters in regular expressions
as used by grep and sed. $ is special: it matches the end of the line.
There are others, like ^ [ ] + * etc.
If any of these special chars are in your searchstring, grep will fail
and sed will fail.
Mehmet Yousouf wrote:
I'm having trouble with the following search and replace script:
#!/bin/bash
# two parameters are passed in, a mapping file and the text file to replace
in
for fields in $(cat ./Mapping/$1-Mapping |awk 'BEGIN{FS=","}{print $2}')
do
searchstring= $fields
replacestring="`grep -w $fields ./Mapping/$1-Mapping |awk
'BEGIN{FS=","}{print $1}'`"
sed -e "s/$searchstring, / $replacestring, /g" $2>TestResult
done
it fails if there is a $ sign in the variable $field e.g. amount_$ . How
can I get grep to "behave" the way I want?
One solution:
1. read in the replace and search strings in one go, which makes the script
run faster and avoids the need for grep. bash's read command is fine for
this if we set the field separator (IFS) to a comma
2. use perl to perform the substitution, incorporating the special characters
\Q at the beginning of the search string, which tells perl to ignore the
special characters I spoke of above.
3. we use the -i switch in perl to edit the file TestResult in situ and the -p
switch to wrap the perl command (after -e) in an input loop followed by a
print
Try this:
#/bin/bash
cp "$2" TestResult
export IFS=','
cat Mapping/$1-Mapping | while read replace search
do
perl -i -p -e "s/\Q$search/$replace/g" TestResult
done
cheers
rickw
--
_________________________________
Rick Welykochy || Praxis Services
I think there is a world market for about five computers.
-- Thomas Watson, IBM, 1943
--
SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/
Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html