Как получить только определенные поля из данного файла?

У меня есть список сотрудников в следующем формате

Name: Phone No: Email: Name: Address: Phone No: Email: Name: Country: Address: Phone No: Email: Name: Address: Name : Email: Address: 

Все, что я хочу, это получить только имя и адрес электронной почты. Как добиться того же?

Я пробовал что-то вроде cat filename | grep -e ^Name: -e ^Email: cat filename | grep -e ^Name: -e ^Email: но не был на 100% успешным.

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

 grep '^Name:\|^Email:' filename 

Если «не на 100% успешнее» вы подразумеваете, что вам нужны только значения полей без имен полей, тогда вам нужно использовать awk а не grep.

например

 awk -F: '$1 ~ /^(Name|Email)$/ {print $2}' filename 

Или, если вам по-прежнему нужна каждая запись, разделенная пустой строкой:

 awk -F: '$1 ~ /^(Name|Email)$/ {print $2}; /^[[:space:]]*$/ {print "\n"}' filename