如何检查文件是否包含使用bash的特定字符串如何检查文件是否包含使用bash的特定字符串(How t

2019-05-12 14:52发布

我要检查,如果一个文件包含一个特定的字符串或没有在bash。 我用这个脚本,但它不工作:

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

什么是错在我的代码?

Answer 1:

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,则意味着该条件为真; 否则为false。

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

正如你可以看到你在这里直接运行程序。 无需额外的[][[]]



Answer 2:

除了其他的答案,它告诉你如何做你想要什么,我试图解释什么是错的(这是你想要的。

在击, if要遵循的命令。 如果该命令的退出码等于0,则then部分被执行,否则该else如果任何被执行的部分。

你可以做到这一点的任何命令在其他的答案解释: if /bin/true; then ...; fi if /bin/true; then ...; fi

[[是专用于一些测试内部bash命令,如文件存在,变量比较。 同样[被一个外部命令(它位于通常/usr/bin/[ ),其进行大致相同的测试,但需要]作为最后一个参数,这就是为什么]必须与左边的空间,这是不被填充用的情况下]]

在这里,你不必[[也不[

另一件事是你引用的东西的方式。 在bash中,只有一种情况下对报价做窝,它是"$(command "argument")" 。 但在'grep 'SomeString' $File'你只有一个词,因为'grep '是带引号的单元,这是连接在一起SomeString ,然后再与串联' $File' 。 变量$File甚至没有与它的值替换,因为使用单引号的。 这样做的正确方法是grep 'SomeString' "$File"



Answer 3:

##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


Answer 4:

grep -q [PATTERN] [FILE] && echo $?

退出状态是0 ,如果图案被发现(真); 否则blankstring。



Answer 5:

最短(正确的)版本:

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"


Answer 6:

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


Answer 7:

如果你想checkif字符串的整条生产线相匹配,如果它是一个固定的字符串,你可以这样来做

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

从该名男子文件:

-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.)


Answer 8:

试试这个:

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


Answer 9:

我做到了这一点,似乎做工精细

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


Answer 10:

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


文章来源: How to check if a file contains a specific string using Bash
标签: bash shell grep