【发布时间】:2015-09-05 12:58:55
【问题描述】:
请解释一下这个awk 命令的作用:
awk '$0!~/^$/{print $0}'
【问题讨论】:
标签: awk
请解释一下这个awk 命令的作用:
awk '$0!~/^$/{print $0}'
【问题讨论】:
标签: awk
它删除空行。条件是$0(整行)不匹配!~正则表达式/^$/(行首紧跟行尾)。
类似于grep -v '^$'
【讨论】:
它打印非空输入行。注意:在这种情况下,“空”并不意味着“空白”。
【讨论】:
你的例子可以简单地重写:
awk '!/^$/'
或
sed '/^$/d'
【讨论】:
就像 Ben Jackson 和其他人所说的那样,它完全删除了空行。不是具有一个或多个空格的空格,而是零字符长的空格。我们永远不会知道这是否是预期的行为。
我想说明的是,代码至少是冗余的,甚至不是三倍冗余,这取决于它的用途。
它的作用是将输入行打印到输出如果输入行是不是空行。
由于 awk 的标准行为是,如果满足没有后续程序块的条件,则打印输入行,这就足够了:
awk '$0!~/^$/' or even shorter awk '$0!=""'
如果你可以确定,没有任何行会被解析为零,甚至是一个
awk'$0'
可以解决问题。
【讨论】:
先让它可读...
echo '$0!~/^$/{print $0}' | a2p ==> $, = ' '; $\ = "\n"; 而(){ 咀嚼; 如果 ($_ !~ /^$/) { 打印 $_; } }还有解释。在这种情况下,不要打印空行。
【讨论】:
$_ 比 $0 好吗?我认为这个答案不是很有帮助。