ファイルに特定の文字列が含まれているかどうか、または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を返した場合は、条件が真であることを意味します。それ以外の場合は偽です。
$ if /bin/true; then echo that is true; fi
that is true
$ if /bin/false; then echo that is true; fi
$
ご覧のとおり、ここでプログラムを直接実行しています。追加の[]
または[[]]
はありません。
##To check for a particular string in a file
cd PATH_TO_YOUR_DIRECTORY #Changing directory to your working directory
File=YOUR_FILENAME
if grep -q STRING_YOU_ARE_CHECKING_FOR "$File"; ##note the space after the string you are searching for
then
echo "Hooray!!It's available"
else
echo "Oops!!Not available"
fi
grep -q [PATTERN] [FILE] && echo $?
パターンが見つかった場合、終了ステータスは0
(true)です。それ以外の場合は空白文字列。
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
最短(正しい)バージョン:
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 "SomeString" $File) ]] ; then
echo "Found"
else
echo "Not Found"
fi
文字列が行全体に一致することを確認したい場合、およびそれが固定文字列の場合は、次のようにして実行できます。
grep -Fxq [String] [filePath]
例
searchString="Hello World"
file="./test.log"
if grep -Fxq "$searchString" $file
then
echo "String found in $file"
else
echo "String not found in $file"
fi
Manファイルから:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by newlines, any of
which is to be matched.
(-F is specified by POSIX.)
-x, --line-regexp
Select only those matches that exactly match the whole line. (-x is specified by
POSIX.)
-q, --quiet, --silent
Quiet; do not write anything to standard output. Exit immediately with zero
status if any match is
found, even if an error was detected. Also see the -s or --no-messages
option. (-q is specified by
POSIX.)
ファイルにnotに特定の文字列が含まれているかどうかを確認する場合は、次のように実行できます。
if ! grep -q SomeString "$File"; then
Some Actions # SomeString was not found
fi
私はこれをやった、うまくいくようです
if grep $SearchTerm $FileToSearch; then
echo "$SearchTerm found OK"
else
echo "$SearchTerm not found"
fi