首页 > 解决方案 > 如果段落包含存储在变量中的字符串,则打印段落(空白行分隔段落)

问题描述

我正在尝试在 /var/spool/mail/mysuser 文件中隔离邮件的标题。

如果段落包含 AAA,则打印段落(空白行分隔段落)

使用字符串“AAA”搜索时,sed 正在工作

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

使用变量时不起作用:

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

=> 没有输出,因为单引号阻止了变量的扩展

尝试使用单引号

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

实际上,第一次搜索也不适用于双引号

$ 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

我也在考虑 awk 到目前为止没有成功

有什么建议吗?

标签: awksed

解决方案


应该是微不足道的awk

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

有一个变量,更需要一点

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

或者如果它在其他地方定义

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

推荐阅读