дать строку по умолчанию в качестве вывода, если вывод команды пуст - PullRequest
0 голосов
/ 27 июня 2018

У меня есть команда, которая может иметь пустую строку в качестве вывода, я хочу, чтобы при выполнении:

myCommand | something 'default'

Возвращает вывод myCommand или default, если вывод был пустым

Я пробовал myCommand |awk '{if(\$0==""){print "default"}}', но это не всегда работает.

Ответы [ 3 ]

0 голосов
/ 27 июня 2018
echo foo | sed 's/^$/default/'

Выход:

foo

echo | sed 's/^$/default/'

Выход:

default
0 голосов
/ 27 июня 2018

Вы можете пропустить пустые строки с

myCommand | grep . || echo 'default'

так что вы можете предпочесть комментарий @BenjaminW. :

var=$(myCommand)
echo "${var:-default}"
0 голосов
/ 27 июня 2018

Так как вы упомянули awk, вот один из способов.

Примечание это для пустого вывода, то есть вывести значение по умолчанию, если myCommand вообще ничего не выводит. Если вы хотите обработать программу, которая выводит пустую строку, это что-то другое.

myCommand | awk -v def="default" '{print} END { if(NR==0) {print def} }'

{print} пропускает каждую строку ввода. В конце (END{...}) NR - это количество входных записей, т. Е. Количество строк, полученных из myCommand. Это будет 0, если вывод не был напечатан myCommand. Если это так, выведите значение 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
...