web-dev-qa-db-ja.com

Bashを使ってファイルに特定の文字列が含まれているかどうかを調べる方法

ファイルに特定の文字列が含まれているかどうか、またはbashではないかどうかをチェックしたいです。このスクリプトを使いましたが、うまくいきません。

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

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

204
Hakim
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
$

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

381
Igor Chubin
##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
9
grep -q [PATTERN] [FILE] && echo $?

パターンが見つかった場合、終了ステータスは0(true)です。それ以外の場合は空白文字列。

5
SupermanKelly
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
3
user5854766

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

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"
3
lzap

これを試して:

if [[ $(grep "SomeString" $File) ]] ; then
   echo "Found"
else
   echo "Not Found"
fi
1
vgokul129

文字列が行全体に一致することを確認したい場合、およびそれが固定文字列の場合は、次のようにして実行できます。

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.)
1
Shubham Khatri

ファイルにnotに特定の文字列が含まれているかどうかを確認する場合は、次のように実行できます。

if ! grep -q SomeString "$File"; then
  Some Actions # SomeString was not found
fi
0
Lahiru Chandima

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

if grep $SearchTerm $FileToSearch; then
   echo "$SearchTerm found OK"
else
   echo "$SearchTerm not found"
fi
0
madarekrap