Если вы получили GNU grep
или BSD grep
, то относительно прямолинейно:
grep -E '\b(on[[:alpha:]]*|[[:alpha:]]*on)\b'
Это выглядит п или словом, за которым следуют «on» и нулевые или более буквенные символы, или для нулевых или более буквенных символов, за которыми следует «on», за которым следует граница слова.
Например, учитывая данные:
on line should be selected
cron line should be selected
stone line should not be selected
station wagon
onwards, ever onwards.
on24 is not selected
24on is not selected
Пример запуска:
$ grep -E '\b(on[[:alpha:]]*|[[:alpha:]]*on)\b' data
on line should be selected
cron line should be selected
station wagon
onwards, ever onwards.
$
С строгим POSIX-совместимых grep
, вы должны работать намного тяжелее, если это может быть сделано вообще.
Обратите внимание, что это решение предполагает, что смешанные цифры и буквы не являются «словом» в этом контексте (поэтому не должны выбираться ни on24
, ни 24on
). Если вы не возражаете цифры, появляющиеся как часть слова начала или окончания «на», то вы можете использовать любой из двух других ответов:
или вы можете взломать это в форму, чтобы он делал то, что делает один из них.
Слова * как * «один» и «cron», но не «камень». Итак ... нет сибилянтов? Абстрактные существительные? Возможно, вы можете использовать флаг 'do-what-I-mean'. – Beta
Попытайтесь использовать команду: grep –
Каково правило, что должно и не должно быть включено. – Simba