空语句运算符只捕获数字或字母

时间:2014-10-14 14:21:45

标签: bash perl if-statement awk

我有两个文件,其中一个有数据文件1:

content

file2是用vi创建的,我只是放了一些进入并有两三行,但仍然没有数据只是内容。

当我添加行但没有其他内容时,这对我不起作用。

if [ ! -s file2 ]
    print "file2 is empty"
else
    print "file2 has content"
fi

在这种情况下,转:file2有内容

这个想法是要抓住那个文件中是否有任何字母或数字,如空格或输入为空。

3 个答案:

答案 0 :(得分:5)

if perl -ne'exit 1 if /\S/' file ; then
   echo 'Only contains blank lines'
fi

来想一想,grep也可以做到这一点。

if ! grep -q '[^[:space:]]' file ; then
   echo 'Only contains blank lines'
fi

这些比anubhava的解决方案更好,因为他们认为只包含空格和制表符的行是空白行。为尾随空格分配显着性永远不是一个好主意。

答案 1 :(得分:3)

您可以使用$(<file2)来检查零内容文件:

if [[ -z "$(<file2)" ]]; then
    print "file2 is empty"
else
    print "file2 has content"
fi

[[ -z "$(<file2)" ]]仅适用于零内容文件或仅包含新行的文件

答案 2 :(得分:1)

awk way

awk 'NF{x++}END{print x?"File has content":"File empty"}' file

当以这种方式找到内容时,您也可以停止处理文件

awk 'x+=NF{exit}END{print x?"File has content":"File empty"}' file