Как использовать grep для сопоставления либо с пробелом, либо с символом новой строки - программирование

Как использовать grep для сопоставления либо с пробелом, либо с символом новой строки

Я хочу grep файл со словом, скажем, "AAA", и заканчивается пробелом или символом новой строки. Я знаю, как писать это отдельно, следующим образом, но имея проблемы с их объединением (в том смысле, что он выводит как VVV AAA, так и AAA VVV).

$echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA$" 
>VVV AAA
$echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA[[:space:]]" 
>AAA VVV 

Я пробовал использовать [], но безуспешно..

4b9b3361

Ответ 1

Если вы ищете слово AAA, за которым следует пробел в любом месте строки или в конце строки, используйте

grep -P "AAA( |$)"

Ответ 2

Вы можете использовать параметр -e grep для выбора многих шаблонов:

grep -e "AAA$" -e "AAA[[:space:]]"

От человека grep:

-e PATTERN, --regexp=PATTERN
      Use  PATTERN  as  the  pattern.   This  can  be  used to specify
      multiple search patterns, or to protect a pattern beginning with
      a hyphen (-).  (-e is specified by POSIX.)

Ответ 3

Используйте "AAA\b", если это приемлемо также для соответствия AAA, за которым следует любой другой символ, отличный от алфавита. Согласно страницам grep man, \b соответствует пустой строке на краю слова.

$ echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA\b"
AAA VVV
VVV AAA