如何grep一个空字符串?

时间:2014-12-12 08:15:54

标签: 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

当我使用sed命令时,该行为空。

提前谢谢!

更新 这些是input.txt中的一些可能的行

String = TextA
String = 
String = TextB

3 个答案:

答案 0 :(得分:1)

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

if grep -Eq 'String *= *$' input.txt; then
    <command> > output.txt
else
   echo "--" > output.txt
fi

答案 1 :(得分:0)

您可以考虑使用awk:

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

一些解释:

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

答案 2 :(得分:0)

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

egrep 'String[[:space:]]*=[[:space:]]*' input.txt

使它适应你的if / else语句,它应该工作。

或者,如果您想在&#34; =&#34;之前指定一个空格,请执行:

egrep 'String[[:space:]]{1}=[[:space:]]*;