bashコマンドラインではなくbashスクリプトで実行すると、同じsed正規表現(grep以降)が失敗するのはなぜですか?

bashコマンドラインではなくbashスクリプトで実行すると、同じsed正規表現(grep以降)が失敗するのはなぜですか?

ここにスクリプトがあります。私が実行すると成功します。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

私は実際にこれを見つけることができました、そして私は同じ壁に頭を当てる次のGoogleスタッフのためにここに追加する必要があると思いました。

grepエイリアスがありますそして GREP_OPTIONS置く。これにより、他のコマンドにパイプされても、カラーハイライトはスクリプト内に残ります。これは通常一緒にうまく機能しませんsed

私の.aliasとオプションは次のとおりです。

alias grep='grep -i --color'
export GREP_OPTIONS="--color=always"

したがって、スクリプトで実行するときにaliasコマンドを使用しないため、色は常にオンになっている必要があります。したがって、エイリアスを確認すると、対応する--colorオプションが表示されます(autoつまり、「他のコマンドでパイプされる出力に色を付けない」(例sed:))。

GREP_OPTIONSgrep私も設定したことを忘れてしまったので混乱しています。したがって、スクリプトのデフォルト値がデフォルト値にcolor設定されると予想されますauto(globalが設定されていない場合はそうなりますGREP_OPTIONS)。しかしそれは真実ではない。

私の新しい設定は次のとおりです(タグが重複しているようですが、--color覚えておくGREP_OPTIONSようにしておきます)。

alias grep='grep --color=always'
export GREP_OPTIONS="--ignore-case --color"

これにより、コマンドラインにあるたびにすべてのgrepが強調表示されます(通常私が望むものです)。ただし、スクリプトでは、他のコマンドにパイプされていない場合にのみデフォルトで色付けされています。まだ多くのスクリプトに --color=always を追加する必要があります(ほとんどの場合、出力を表示できない場合を除き、他のコマンドにパイプするときにも強調表示する傾向があるため)。

関連情報