LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (http://www.linuxquestions.org/questions/programming-9/)
-   -   problems with variables using sed or awk in script (http://www.linuxquestions.org/questions/programming-9/problems-with-variables-using-sed-or-awk-in-script-669940/)

FeatherKing 09-14-2008 09:02 PM

problems with variables using sed or awk in script
 
I am trying to compare the differences in two variables to make a third variable. Much like running 'diff file1 file2' i am trying to run
Code:

FILE3=`echo $FILE1 | sed -e "s/$FILE2//g"
this is working correctly if $FILE2 is something simple like a line of text.

The problem i am running into is: $FILE2, in my case, has a "." (for example two names: "john.larson kyle.hyde") in it and sed is trying to interpret the "." as a special character. I cant escape it because its inside the variable. Awk is giving the same behavior with something like
Code:

FILE3=`echo $FILE1 | awk -v FILE2=$FILE2 '{gsub(FILE2, "")'`
but it complains the the "." in the variable is a syntax error, and again i cant escape it becuase it is in a variable.

I have also tried something like
Code:

FILE3=`echo ${FILE1//FILE2/}`
and this doesnt seem to error at all but it is not actually removing the FILE2 information from FILE1.

Because of the functions later in the script, i need to keep the periods as they are. Right now i have this working by sending the command out to two text files and comparing them with diff. If possible i would like to do this in the script using only variables.

Mr. C. 09-14-2008 09:41 PM

You can use perl's \Q \E quoting characters to avoid special character interpretation.

Code:

$ FILE1='tom.foolery'; FILE2='tom.fool' ; echo $FILE1 | perl -pe "s/\Q$FILE2\E//"   
ery

$ FILE1='tom foolery'; FILE2='tom.fool' ; echo $FILE1 | perl -pe "s/\Q$FILE2\E//"
tom foolery


FeatherKing 09-14-2008 10:48 PM

Unfortunatley this is a pretty basic load and perl is not part of it. I was looking at some examples of using & within gsub like
Code:

gsub(&FILE2, "")
but again it complains about syntax

Kenhelm 09-14-2008 10:51 PM

In Bash this removes every match of $FILE2 from $FILE1
Code:

FILE3=${FILE1//"$FILE2"/}
You can also escape the '.' for sed.
Here ${FILE2//./\\.} replaces all '.' in $FILE2 with '\.'
Code:

FILE3=`echo "$FILE1" | sed -e "s/${FILE2//./\\.}//g"`

FeatherKing 09-14-2008 11:13 PM

Excellent, i guess i was just missing some double quotes, this worked great
Code:

FILE3=`echo ${FILE1//"FILE2"/}
Thanks again


All times are GMT -5. The time now is 01:30 AM.