Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 空语句运算符仅捕获数字或字母_Bash_Perl_If Statement_Awk - Fatal编程技术网

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

Bash 空语句运算符仅捕获数字或字母,bash,perl,if-statement,awk,Bash,Perl,If Statement,Awk,我有两个文件,其中一个有数据文件1: content file2是用vi创建的,我只输入了一些条目,有两到三行,但仍然没有数据,只有内容 这对我来说不起作用,当我添加了行但没有其他东西时 if [ ! -s file2 ] print "file2 is empty" else print "file2 has content" fi 在这种情况下是turn:file2有内容 这样做的目的是,如果文件中有任何字母或数字,比如空格或enter,则将其保存为空。您可以使用$( 想

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

content
file2是用vi创建的,我只输入了一些条目,有两到三行,但仍然没有数据,只有内容

这对我来说不起作用,当我添加了行但没有其他东西时

if [ ! -s file2 ]
    print "file2 is empty"
else
    print "file2 has content"
fi
在这种情况下是turn:file2有内容


这样做的目的是,如果文件中有任何字母或数字,比如空格或enter,则将其保存为空。

您可以使用
$(
想想看,
grep
也能做到这一点

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

这比AUBHAVA的解决方案要好,因为他们认为只包含空格和制表符的行是空白行。将意义赋予尾随空白是一个好主意。

< P> AWK方式< /P>
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

@tripleee,谢谢,修复了。你在说什么
如果没有提供参数,他们会从STDIN获取输入
。Anubhava的解决方案可以像这些一样轻松地从STDIN获取输入?@Jidder,哦,我明白了,你应该使用
“$(命令)”
,而不是
$(@ikegami yep,我同意最好考虑所有空格字符:)+1对于grep解决方案,这是正确的答案。我会使用
if grep-q'[[:graph:]]'
而不是
if!grep-q'[^[:space:]]“
但为了避免双重否定。如果
file2
包含除尾随换行符以外的任何空格,它仍将显示为包含内容。是的@chepner是这样,但OP在问题中多次输入enter。我不确定OP是否也会认为空格/制表符没有内容。”任何其他内容,如空格或enter,都可以为空:我认为“空”文件可能包含带空格的行,但不包含其他可打印字符。好的,为了处理空格,我们可以在上述
if
条件中使用
[[-z”$(tr-d'[:space:]'
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