grepを使用して入力行に特定のパターンが含まれているかどうかを調べるbashスクリプトセグメントがあります。文字列にawkの部分文字列が含まれているかどうかを調べる方法
echo $input_line | grep -q "$pattern"
if [ $? -eq 0 ];
then
# Input line contains pattern
# Execute some bash commands
else
# Input line DOES NOT contain pattern
# Execute other bash commands
fi
grepのないawkで書き直す必要があります。私はいくつかの変種を試しましたが、それらのどれもうまくいきません。たとえば、以下の両方の場合、常にMATCHが表示されます。 入力行パターンが含まれているかどうかは関係ありません。
echo $input_line | awk -v b="$pattern" '/pattern/ { print "MATCH" }'
echo $input_line | awk -v b="$pattern" '/$0 ~ pattern/ { print "MATCH" }'
更新:
削除/記載されている問題を解決する推奨されているように。今私はif文での使用のためにawkコマンドの結果を返すことに問題があります。変数RESが設定されていない第2の場合には、入力ラインがパターンに含まれていない場合ので、
pattern="abc"
input_line="xyz123 678q we uqa abc asd"
RES=$(echo $input_line | awk -v pat="$pattern" '$0 ~ pat { print "1" }')
if [ $RES -eq 1 ];
then
echo Input line $input_line contains pattern $pattern
else
echo Input line $input_line DOES NOT contains pattern $pattern
fi
input_line="tult uil7665 5444tu l098 7tu"
RES=$(echo $input_line | awk -v pat="$pattern" '$0 ~ pat { print "1" }')
if [ $RES -eq 1 ];
then
echo Input line $input_line contains pattern $pattern
else
echo Input line $input_line DOES NOT contains pattern $pattern
fi
は、だから私は、次のような出力を持っている:
Input line xyz123 678q we uqa abc asd contains pattern abc
./test.sh: line 21: [: -eq: unary operator expected
Input line tult uil7665 5444tu l098 7tu DOES NOT contains pattern abc
私は、次の「醜い」スニペットを書きました
ifステートメントでこの「醜い」スクリプトスニペットを改善する方法はありますか?あなたがする必要があるだろう、パターンマッチのために参照される変数にはawkを使用するには
おかげ
最後の試行の '/'を取るだけです。 '$ 0〜pattern {print ... ' –
質問を編集しているときに、サンプル入力と出力を含めて、手段 –