web-dev-qa-db-ja.com

bashで一致するパターンを確認する方法は?

値がABCまたはABDで始まるファイルがあります。

入力ファイルから値を取得した後、ABCまたはABDで始まることを確認する方法は?

例えば:

value=$(cat file | awk 'NF{print;exit}' | awk '{print $1}')

そして、この$ valueがABCまたはABDで始まることを確認したいと思います。どうやって?

2
Anony

caseを使用

シェル変数がABCまたはABDで始まるかどうかを確認するには、従来の(そして非常に移植性の高い)方法はcaseステートメントを使用することです:

case "$value" in
  AB[CD]*) echo yes;;
   *)      echo no;;
esac

これには外部プロセスが必要ないため、高速である必要があります。

[を使用

または、testコマンドを使用できます。

if [ "${value#AB[CD]}" != "$value" ]
then
   echo yes
else
   echo no
fi

これも非常にポータブルです。

[[を使用

最後に、より現代的で移植性の低いtestコマンドを使用できます。

if [[ $value == AB[CD]* ]]
then
   echo yes
else
   echo no
fi

ファイルを読み取り、すべてを1ステップでテストする

ファイルの最初の空でない行を読み取り、その最初のフィールドがABCまたはABDで始まるかどうかをテストするには:

awk 'NF{if ($1~/^AB[CD]/) print "yes"; else print "no";exit}' file
6
John1024

これを試して:

 echo $value | grep -c "^AB[CD]"

パターンが最初に存在する場合、これは1を返します。

2
Jay