Новый разделитель строк для каждого результата grep (даже если значение grep равно null) - PullRequest
0 голосов
/ 11 апреля 2020

Если содержимое файла:

echo -n "Host is:"; grep -h -E 'host_value'    /file_path
echo -n "IPAD is:"; grep -h -E 'Address_value' /file_path

Как заставить каждый вывод grep находиться в отдельной строке, даже если вывод grep равен нулю? И как заменить пустые значения на указанную c строку, например «Нет значения для этого параметра».

Например, если host_value - это имя хоста, а Address_value - это ноль, то вывод должен быть таким, как показано ниже:

Host is:hostname  
IPAD is:No value for this parameter

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Возможно сначала присвойте результат grep переменной.

HOST=$(grep -h -E 'host_value'    /file_path 2>/dev/null)
ADDR=$(grep -h -E 'Address_value' /file_path 2>/dev/null)

echo "Host is: $HOST"
echo "IPAD is: $ADDR"

# replace null value
DEFAULT="No value for this parameter"
echo "Host is: ${HOST:-$DEFAULT}"
echo "IPAD is: ${ADDR:-$DEFAULT}"

См. Bash Справочное руководство для синтаксиса :-.

0 голосов
/ 11 апреля 2020

grep выходит со статусом выхода 1, если совпадений нет, поэтому вы можете просто использовать || для печати пустой строки или сообщения «нет значения».

Пустая строка:

echo -n "Host is:"; grep -h -E 'host_value'    /file_path || echo
echo -n "IPAD is:"; grep -h -E 'Address_value' /file_path || echo

Настраиваемое сообщение:

echo -n "Host is:"; grep -h -E 'host_value'    /file_path || echo "No value for this parameter"
echo -n "IPAD is:"; grep -h -E 'Address_value' /file_path || echo "No value for this parameter"

Обратите внимание, что будет напечатано пустую строку / настраиваемое сообщение даже в другом сценарии ошибки ios, например, файл не найден. Чтобы охватить этот сценарий ios, вы должны убедиться, что статус выхода действительно равен 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...