Это может работать для вас:
sed -n '/name/{h;s//name is &/p};${x;/./!s/^/no names found/p}' $people
Предполагается, что $people
- это файл, содержащий не менее одной строки
РЕДАКТИРОВАТЬ: Объяснение - -n
запретить печать по умолчанию на стандартный вывод.Найдите name
в каждой строке файла $people
и, если найдена, скопируйте строку для хранения пробела (HS) и добавьте name is
к значению и распечатайте.В последней строке переключитесь на HS и, если он ничего не содержит, распечатайте no names found
.
Альтернатива bash:
names=($(grep "name" $people))
((${#names[@]})) && printf "name is %s\n" "${names[@]}" || printf "no names found\n"
EDIT: заполните массив names
с помощью grep
выход.Проверьте размер массива names
и, если он не равен нулю, добавьте name is
к каждому значению и распечатайте, иначе распечатайте no names found
.