如何让sed命令读取已导出的环境变量以匹配指定日期行
sed 中使用导出变量的正确写法
错误原因
你原有写法的问题在于使用了单引号包裹sed的匹配规则,单引号会阻止Shell解析内部的$x变量,变量会被sed当做普通字符串处理,额外拼接的引号也不符合语法要求。
Shell 本身没有严格的整数类型定义,所有变量默认以字符串形式存储,只要你导出的x为纯数字,直接拼接进规则即可实现数字匹配效果,不需要额外做类型转换。
正确实现
场景1:输出匹配日期的完整行
export x=10 sed -n "/2020-$x/p" filename
执行后输出内容为:
2020-10-9 Sold 50 Shirts
场景2:仅输出匹配的日期字段
如果需要只提取日期部分,可使用以下两种方式实现:
- 搭配awk切割取第一列:
sed -n "/2020-$x/p" filename | awk '{print $1}'
- sed单步完成匹配+提取:
sed -n "s/^\(2020-$x-[0-9]*\).*/\1/p" filename
两种方式执行后都可以得到你期望的输出:
2020-10-9
注意事项
如果在双引号包裹的sed规则中需要使用正则的行尾匹配符$,需要加反斜杠转义为\$,避免被Shell识别为变量前缀触发解析。
内容的提问来源于stack exchange,提问作者BaleKaneSon
相关产品推荐
相关产品推荐

