awk - 如果段落包含存储在变量中的字符串,则打印段落(空白行分隔段落)
问题描述
我正在尝试在 /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 到目前为止没有成功
有什么建议吗?
解决方案
应该是微不足道的awk
$ awk -v RS= '/AAA/' file
有一个变量,更需要一点
$ awk -v RS= -v var='AAA' '$0~var'
或者如果它在其他地方定义
$ awk -v RS= -v var="$variable_holding_value" '$0~var'
推荐阅读
- javascript - 在 JavaScript 中更改对象的键
- java - Hibernate - 多对多实现
- c# - 在 SQL CLR 中使用 Entity Framework 6 / EF Core
- typescript - 获取类型别名的名称
- microservices - 微服务架构:数据访问服务
- php - 如何在 PHP 中将 m3u8 转换为 base64 编码?
- reactjs - 如何在 useEffect 挂钩中仅查看对象中的单个字段?
- java - 在 recyclerview 中滚动时内存使用量增加
- mysql - MySQL InnoDB:WAL、Double Write Buffer、Log Buffer、Redo Log 的区别
- python - 如何使用 Dask 从谷歌云存储中读取多个大型 CSV 文件的块,而不会一次全部超载内存