如果文本文件中没有字符串,我正在尝试运行一些shell命令。如果我将此行粘贴到命令行中,如果给我一个错误。
if [ $(cat textfile.txt | grep "search string") -eq "" ]; then; echo "some string"; fi;
错误:
-bash: [: -eq: unary operator expected
答案 0 :(得分:6)
如果您使用[]
进行比较,则需要使用=
代替-eq
。你还需要一些报价。
if [ "$(cat textfile.txt | grep 'search string')" = "" ]; then; echo "some string"; fi;
请注意,grep
可以使用文件名作为参数,因此cat
是不必要的。您也可以直接使用grep
的返回值:如果找不到搜索字符串,grep将返回1.
if [ "$(grep 'search string' textfile.txt)" ]; then
echo "some string";
fi
更紧凑的方法是使用逻辑和&&
。
grep "search string" textfile.txt && echo "some string"
答案 1 :(得分:2)
grep -F -q -e 'search string' textfile.txt || echo 'Not found'
注意:
-F
阻止将搜索字符串解释为正则表达式。-q
抑制所有输出并在找到第一个实例后立即返回,如果字符串出现在大文件的开头,则搜索速度会快得多。-e
明确指定模式,允许以破折号开头的模式。答案 2 :(得分:1)
如果找到请求的行,grep
命令将返回0(如果没有,则返回1,如果错误,则返回2),因此您可以使用:
grep "search string" textfile.txt >/dev/null 2>&1
if [[ $? -ne 0 ]] ; then
echo 'Not found'
fi
如果确实想要使用字符串(你可能不应该),你应该引用它们,这样你就不会得到[
命令的太多参数:< / p>
if [ "$(cat textfile.txt | grep 'search string')" == "" ] ; then
echo "It's not there!"
fi
答案 3 :(得分:1)
在这种情况下不需要方括号。由于[
实际上是一个命令,因此可以在任何使用它的地方使用任何命令。所以在这里,我们可以使用grep
。由于cat
将接受文件名作为参数,因此无需使用grep
。另外,你有两个太多的分号。
if grep -q "search string" textfile.txt; then echo "some string"; fi
或
if grep "search string" textfile.txt > /dev/null 2>&1; then echo "some string"; fi