Fdv
Fdv

Reputation: 455

Print paragraph if it contains a string stored in a variable (blank lines separate paragraphs)

I am trying to isolate the header of a mail in the /var/spool/mail/mysuser file.

Print a paragraph if it contains AAA (blank lines separate paragraphs)

sed is working when searching with the string "AAA"

$ sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;' /var/spool/mail/mysuser

When using a variable is does not work :

$ MyVar="AAA"
$ sed -e '/./{H;$!d;}' -e 'x;/$MyVar/!d;' /var/spool/mail/mysuser

=> No output as the single quotes prevent the expantion of the variable

Trying with singles quotes

$ sed -e "/./{H;$!d;}" -e "x;/$MyVar/!d; /var/spool/mail/mysuser
sed: -e expression #2, char 27: extra characters after command

Actually, the first search is also not working with doubles quotes

$ sed -e "/./{H;$!d;}" -e 'x;/AAA/!d;" /var/spool/mail/mysuser
sed -e "/./{H;$!d;}" -e "x;/AAA/date;" /var/spool/mail/mysuser
sed: -e expression #2, char 9: extra characters after command

I am also considering awk without success so far

Any advices ?

Upvotes: 2

Views: 104

Answers (3)

karakfa
karakfa

Reputation: 67507

should be trivial with awk

$ awk -v RS= '/AAA/' file

with a variable, little more needed

$ awk -v RS= -v var='AAA' '$0~var'

or if it's defined elsewhere

$ awk -v RS= -v var="$variable_holding_value" '$0~var'

Upvotes: 4

Fdv
Fdv

Reputation: 455

Thanks to karakfa It works with :

MyVar="AAA"
awk -v RS= -v X=$MyVar '$0~X' file

Upvotes: 0

perreal
perreal

Reputation: 98048

That is happening because of the single quotes. You need to go out of the single quotes to enable interpolation:

sed -e '/./{H;$!d;}' -e 'x;/'$MyVar'/!d;' /var/spool/mail/mysuser 

or, better put the variable in double quotes:

sed -e '/./{H;$!d;}' -e 'x;/'"$MyVar"'/!d;' /var/spool/mail/mysuser 

Upvotes: 1

Related Questions