使用变量日期(有破折号)来匹配没有破折号的表达式

问题描述 投票:0回答:1

我正在使用保存在 .bashrc 中的导出变量(即今天和第二天的日期)来尝试在我正在抓取天气信息的网页中找到它们的匹配项。我必须用分隔符(破折号)保存日期变量,否则我无法将它们导出到脚本自动更新的 ~/.bashrc 中。问题是我试图从网页中匹配它们的日期有空格,而原始日期有破折号。

我在 ~/.bashrc 中的导出变量的示例:

export xdate=Fri-04-Oct

因此,如果我尝试匹配 10 月 4 日星期五,因为它显示在网页上,如下所示:

grep -F $(echo $xdate | tr '-' ' ')  casablanca_info

我的结果仅在周五匹配,这就是为什么我使用 -F 来尝试匹配整个字符串。我是编程新手,我知道我可以像 grep -F 'Fri 04 Oct' 一样使用 grep ,不会出现任何问题,但当字符串位于变量中时,我无法匹配字符串,并且我删除了空格。

我还尝试将 $xdate 括在这样的引号中

grep -F $(echo "$xdate" | tr '-' ' ')  casablanca_info

我尝试将其从 ~/.bashrc 中的保存方式更改为

export xdate='Fri-04-Oct'

强制搜索包括空格在内的整个字符串,我又回到只在结果中返回 Fri 的状态。

我从 shellcheck.net 收到的建议建议在 $xdate 周围加上引号,或者包含一个 shebang 指令,我尝试只是为了咯咯笑,但我一直在 bash shell 中直接测试它,以便在将代码存储在一个脚本。

linux bash grep
1个回答
0
投票

您需要将命令替换放在引号中,这样它将成为单个参数:

grep -F "$(echo $xdate | tr '-' ' ')" casablanca_info

您也可以在变量中存储带空格的日期,只要引用它即可:

xdate='Fri 04 Oct'
grep -F "$xdate" casablanca_info

也不需要使用命令替换,可以使用shell内置的字符替换操作:

grep -F "${xdate//-/ }" casablanca_info
© www.soinside.com 2019 - 2024. All rights reserved.