我有一个命令,该命令的输出中可能有一个空字符串,我希望在执行时要这样做:
myCommand | something 'default'
它返回myCommand
或default
的输出,如果输出为空
我尝试过myCommand |awk '{if(\$0==""){print "default"}}'
,但它并不总是有效。
答案 0 :(得分:3)
自从您提到awk
以来,这是一种方法。
注意,这用于空输出,即,如果myCommand
根本不输出任何内容,则打印默认值。如果您要处理输出空白行的程序,则有所不同。
myCommand | awk -v def="default" '{print} END { if(NR==0) {print def} }'
{print}
使每条输入线通过。最后(END{...}
),NR
是输入记录的数量,即从myCommand
收到的行数。如果myCommand
没有打印输出,则该值为0。如果是这样,请打印def
在命令行中由-v def="whatever text you want"
分配的值。
测试:
$ awk -v def="default" '{print} END {if(NR==0) {print def}}' </dev/null
default
$ awk -v def="default" '{print} END {if(NR==0) {print def}}' <<<'foo'
foo
答案 1 :(得分:1)
echo foo | sed 's/^$/default/'
输出:
foo
echo | sed 's/^$/default/'
输出:
default
答案 2 :(得分:1)
您可以通过以下方式错过空行
myCommand | grep . || echo 'default'
,所以您可能希望使用@BenjaminW的评论。 :
var=$(myCommand)
echo "${var:-default}"