这是脚本。当我从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"
实际上,我能够弄清楚这一点,我想在这里添加它给下一个谷歌用户,他们将头撞到同一堵墙。
我有一个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
to的标记GREP_OPTIONS
是多余的,但我将其留在此处作为提醒):
alias grep='grep --color=always'
export GREP_OPTIONS="--ignore-case --color"
这样,无论何时我在命令行上,我都将突出显示所有我的抱怨(这通常是我想要的)。但是在脚本中,仅当不通过管道传递给另一个命令时,它才会默认为着色。我仍然必须在许多脚本中都添加--color = always(因为在大多数情况下,即使在通过管道传递到另一个命令时,我通常倾向于突出显示,除非我从未看到输出)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句