ファイルに特定の文字列が含まれているかどうかを bash で確認したい。このスクリプトを使用しましたが、機能しません:
if [[ 'grep 'SomeString' $File' ]];then
# Some Actions
fi
私のコードで何が問題になっていますか?
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
$
ご覧のとおり、ここでプログラムを直接実行します。追加[]
または[[]]
.
最短 (正しい) バージョン:
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"
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
これを試して:
if [[ $(grep "SomeString" $File) ]] ; then
echo "Found"
else
echo "Not Found"
fi
私はこれをやった、うまくいくようだ
if grep $SearchTerm $FileToSearch; then
echo "$SearchTerm found OK"
else
echo "$SearchTerm not found"
fi
grep -q "something" file
[[ !? -eq 0 ]] && echo "yes" || echo "no"