Помимо grep или sed , вы можете использоватьawk
:
{
for(i=1; i <= NF; i++)
if ($i ~ /\./)
out=out" "$i
print out
out=""
}
... для сохранения в файл и запуска через awk -f thatfile input1 input2...
или:
awk '{ for(i=1; i <= NF; i++) if ($i ~ /\./) out=out" "$i; print out; out="" }' input
... чтобы поместить скрипт в командную строку -.
Awk автоматически разделяет каждую строку ввода для вас на основе пробелов (значения по умолчанию его специальной FS
переменной ). Сценарий перебирает каждое результирующее поле этого разделения и запускает тест :, если значение этого поля содержит точку (, экранированную, поскольку точка — это специальный токен в регулярных выражениях ), а затем добавляет это поле (. ] с пробелом )в новую строку, которую мы выведем в конце. Это приводит к пропуску полей, не содержащих точку. Как только цикл по полям завершен, мы печатаем это восстановленное значение (вout
)и сбрасываем его на пустую строку, если во входных данных есть больше строк.