Bash 空语句运算符仅捕获数字或字母
我有两个文件,其中一个有数据文件1: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,则将其保存为空。您可以使用$( 想
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