我想检查一个文件是否包含一个特定的字符串或不在bash。我使用了这个脚本,但它不起作用:
if [[ 'grep 'SomeString' $File' ]];then
# Some Actions
fi
我的代码出了什么问题?
我想检查一个文件是否包含一个特定的字符串或不在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的条件。如果该命令在其exitcode中返回0,则意味着条件为真;否则错误。
$ if /bin/true; then echo that is true; fi
that is true
$ if /bin/false; then echo that is true; 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的条件。如果该命令在其exitcode中返回0,则意味着条件为真;否则错误。
$ 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"
如果您想检查文件是否不包含特定的字符串,您可以按照以下方法进行检查。
if ! grep -q SomeString "$File"; then
Some Actions # SomeString was 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
从男子档案中可以看出:
-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.)
试试这个:
if [[ $(grep "SomeString" $File) ]] ; then
echo "Found"
else
echo "Not Found"
fi