web-dev-qa-db-ja.com

変数で複雑な文字列をgrepするにはどうすればよいですか?

私ははるかに大きな文字列の小さな文字列をgrepしようとしています。両方の文字列は変数として保存されており、コード例は次のとおりです。

#!/bin/bash

long_str=$(man man)
shrt_str="guide"

if grep -q $shrt_str $long_str ; then
        echo "Found it!"
fi

変数拡張が期待どおりに機能しているとは思わない。私が試してみました [ ]および[[ ]]、変数を引用し、出力を/dev/nullしかし、私が何をしても、それは動作しません。

誰にもアイデアはありますか?

28
Craig
if echo "$long_str" | grep -q "$shrt_str";then
  echo "found"
fi

または

echo "$long_str" | grep  -q  "$shrt_str"  && echo "found" || echo "not found"

ただし、bashシェルを使用しているため、シェル内部を使用します。外部コマンドを呼び出す必要はありません

shrt_str="guide"
case "$long_str" in 
   *"$shrt_str"* ) echo "Found";;
   * ) echo "Not found";;
esac
38
ghostdog74

grepはファイルまたは標準入力用です。変数を標準入力として使用する場合は、bashのヒアストリング表記を使用する必要があります。

if grep -q "$shrt_str" <<< "$long_str" ; then

あなたが欲しい

if echo $long_str | grep -q $shrt_str; then
9
Alok Singhal

別のBash固有の手法:

if [[ $long =~ $short ]]    # regex match
then
    echo "yes"
fi

ただし、変数に長い文字列が必要ない場合:

if man man | grep $short; then ...

しかし、私はそれが単に例を示す目的のためであると仮定しています。

7