这是脚本。当我从以下位置运行它时就成功了BASH 提示符,但不在脚本中。有任何想法吗?
当我说“失败”时,我的意思是sed regex
不匹配任何内容,因此没有替换的文本。当我在命令行上运行它时,它匹配。
另外,我可能对此有一个答案。这与我的grep
别名和GREP_OPTIONS
奇怪的相互作用有关。我会回复这些细节。
#!/bin/bash
for ((x = 101; x <= 110; x++)); do
urls="${urls} www$x.site.com/config"
done;
curl -s ${urls} | grep -i "Git Commit" | sed -r "s/.*Git Commit<\/td><td>([^<]+).*/\1/g"
答案1
我实际上能够弄清楚这一点,并且我想我会将其添加到这里,以便下一个将头撞到同一堵墙上的谷歌员工。
我有一个 grep 别名和 GREP_OPTIONS
放。这导致颜色突出显示在脚本中保留,即使在管道到另一个命令时也是如此。这通常不能很好地配合sed
.
这是我的 .alias 和选项:
alias grep='grep -i --color'
export GREP_OPTIONS="--color=always"
因此,当从脚本运行时,它不使用别名命令,因此强制颜色始终打开。因此,当我检查我的别名并看到该--color
选项时(这意味着auto
,这意味着“不要对通过管道传输到另一个命令的输出进行着色”(例如sed
)。
GREP_OPTIONS
我很困惑,因为我忘记了我也设置了,所以我希望grep
脚本中的 已color
设置auto
为默认(如果我没有设置 global ,就会如此GREP_OPTIONS
)。但事实并非如此。
这是我的新设置(我认为标记--color
是GREP_OPTIONS
多余的,但我将其留在那里作为提醒):
alias grep='grep --color=always'
export GREP_OPTIONS="--ignore-case --color"
这样,每当我在命令行上时,我都会突出显示所有 grep(这通常是我想要的)。但在脚本中,只有在未通过管道传输到另一个命令时,它才会默认着色。我仍然需要在许多脚本中添加 --color=always (因为在大多数情况下我倾向于突出显示,即使在管道到另一个命令时也是如此,除非我看不到输出)。