Немного упрощенная версия ответа awk
:
awk '{ for (i=1; i<=NF; i++) if ($i !~ /\./) $i = ""; print; }'
Для каждого слова, если оно не содержит точку, вычеркнуть его. Затем распечатайте то, что осталось.
Перечитав вопрос, я вижу, что в нем говорится «каждое слово… которое не имеет точки в середине его ». Так, например, ввод
Mr. Smith ate.5 pies in New York.
не должен выводить ничего, потому что нет слова с точкой в середине. Напротив,
Mr.Smith ate 1.5 pies in New York.
следует указать Mr.Smith
и 1.5
. Таким образом, команда должна быть
awk '{ for (i=1; i<=NF; i++) if ($i !~ /.\../) $i = ""; print; }'
Для каждого слова, если оно не содержит точки, по крайней мере с одним другим символом перед ним и после него, затереть слово.