Bash 如何grep空字符串?

Bash 如何grep空字符串?,bash,shell,grep,Bash,Shell,Grep,我想grep for“String=”当没有提到任何内容时…当它为空时…用if-then-else语句进行回应: 我试过这样的方法: if grep "String" input.txt | sed -e 's/ String = //g' | egrep -q "^$" then <command> > output.txt else echo "--" > output.txt fi 您可以使用此grep检查输入文件中的String=: if grep -Eq

我想grep for“String=”当没有提到任何内容时…当它为空时…用if-then-else语句进行回应:

我试过这样的方法:

if grep "String" input.txt | sed -e 's/    String = //g' | egrep -q "^$"
then
<command> > output.txt
else
echo "--" > output.txt
fi

您可以使用此
grep
检查输入文件中的
String=

if grep -Eq 'String *= *$' input.txt; then
    <command> > output.txt
else
   echo "--" > output.txt
fi
如果grep-Eq'String*=*$'input.txt;然后
>output.txt
其他的
echo“->output.txt
fi

<代码> > p>您可以考虑使用AWK:

CMD=$(awk '$1=="String" {print $3}' input.txt)
if [ -n "$CMD" ]
then
    CMD="--"
fi
echo "$CMD" > output.txt
一些解释:

  • awk打印第三列(因为
    =
    符号前后都有空格;这是第二列)
  • if[-n“$CMD”]
    只是测试变量
    CMD
    是否为空

根据您的问题,我假设您在查找文件中的指定行时遇到问题。以下grep命令将查找这些行:

egrep 'String[[:space:]]*=[[:space:]]*' input.txt
根据您的if/else语句调整它,它应该会起作用

或者,如果要指定“=”前面有一个空格,请执行以下操作:


不起作用…首先您写道:“String=”之后没有空格:“我的字符串有两个空格:”String=”现在表示:“'String=”之后没有空格,但是无论
=
周围是否有0个或更多空格,此grep命令都有效。我的意思是在前面的空格上”=“一个接一个。请查看我的更新。在=周围的空格可以,它们将由我的答案中的正则表达式匹配。还可以通过在命令行上运行
grep-E'String*=*$”input.txt
命令来测试grip输出。您能接受任何答案吗,或者说为什么它们不起作用?
egrep 'String[[:space:]]*=[[:space:]]*' input.txt
egrep 'String[[:space:]]{1}=[[:space:]]*;