ここにスクリプトがあります。私が実行すると成功します。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_OPTIONS
grep
私も設定したことを忘れてしまったので混乱しています。したがって、スクリプトのデフォルト値がデフォルト値にcolor
設定されると予想されますauto
(globalが設定されていない場合はそうなりますGREP_OPTIONS
)。しかしそれは真実ではない。
私の新しい設定は次のとおりです(タグが重複しているようですが、--color
覚えておくGREP_OPTIONS
ようにしておきます)。
alias grep='grep --color=always'
export GREP_OPTIONS="--ignore-case --color"
これにより、コマンドラインにあるたびにすべてのgrepが強調表示されます(通常私が望むものです)。ただし、スクリプトでは、他のコマンドにパイプされていない場合にのみデフォルトで色付けされています。まだ多くのスクリプトに --color=always を追加する必要があります(ほとんどの場合、出力を表示できない場合を除き、他のコマンドにパイプするときにも強調表示する傾向があるため)。