346

ファイルに特定の文字列が含まれているかどうかを bash で確認したい。このスクリプトを使用しましたが、機能しません:

 if [[ 'grep 'SomeString' $File' ]];then
   # Some Actions
 fi

私のコードで何が問題になっていますか?

4

11 に答える 11

618
if grep -q SomeString "$File"; then
  Some Actions # SomeString was found
fi

ここは必要ありません[[ ]]。コマンドを直接実行するだけです。-q見つかったときに表示される文字列が不要な場合にオプションを追加します。

コマンドは、grep検索の結果に応じて、終了コードで 0 または 1 を返します。何かが見つかった場合は 0。1 それ以外の場合。

$ echo hello | grep hi ; echo $?
1
$ echo hello | grep he ; echo $?
hello
0
$ echo hello | grep -q he ; echo $?
0

の条件としてコマンドを指定できますif。コマンドが終了コードで 0 を返す場合、それは条件が true であることを意味します。それ以外の場合は false。

$ if /bin/true; then echo that is true; fi
that is true
$ if /bin/false; then echo that is true; fi
$

ご覧のとおり、ここでプログラムを直接実行します。追加[]または[[]].

于 2012-07-02T04:47:14.737 に答える
15

最短 (正しい) バージョン:

grep -q "something" file; [ $? -eq 0 ] && echo "yes" || echo "no"

のように書くこともできます

grep -q "something" file; test $? -eq 0 && echo "yes" || echo "no"

ただし、この場合は明示的にテストする必要はないため、次の場合と同じです。

grep -q "something" file && echo "yes" || echo "no"
于 2012-07-23T12:17:49.220 に答える
7
if grep -q [string] [filename]
then
    [whatever action]
fi

if grep -q 'my cat is in a tree' /tmp/cat.txt
then
    mkdir cat
fi
于 2016-01-29T00:15:17.203 に答える
4

これを試して:

if [[ $(grep "SomeString" $File) ]] ; then
   echo "Found"
else
   echo "Not Found"
fi
于 2017-11-16T10:41:21.603 に答える
-1

私はこれをやった、うまくいくようだ

if grep $SearchTerm $FileToSearch; then
   echo "$SearchTerm found OK"
else
   echo "$SearchTerm not found"
fi
于 2013-08-01T08:23:44.757 に答える
-3
grep -q "something" file
[[ !? -eq 0 ]] && echo "yes" || echo "no"
于 2012-07-02T09:36:54.963 に答える