Что корректный путь состоит в том, чтобы отформатировать этот grep?

Я испытываю затруднения при выяснении, куда поместить \ в этой команде.

grep "^D.*\(A1|A2|A3\)$" input.txt > output.txt

Я ищу каждую строку, которая запускается с a D и концы с A1, A2 или A3, который является в конце строки.

1
задан 26 January 2019 в 02:39

3 ответа

Просто необходимо было выйти или панели - Вы были почти там:

grep "^D.*\(A1\|A2\|A3\)$"

Обратите внимание, что можно также использовать egrep вместо всех Escape:

egrep "^D.*(A1|A2|A3)$"
3
ответ дан 3 December 2019 в 06:21

Необходимо выйти из каналов (|).

$ grep "^D.*\(A1\|A2\|A3\)$" <(printf 'D%s\n' A1 A2 A3)
DA1
DA2
DA3

Или используйте опцию -E для расширенного regex затем Вы ни из чего не должны выходить.

$ grep -E "^D.*(A1|A2|A3)$" <(printf 'D%s\n' A1 A2 A3)
DA1
DA2
DA3
5
ответ дан 3 December 2019 в 06:21

Вот sed реализация, которая использует комбинацию опции -n и команда p:

sed -rn '/^D.*(A1|A2|A3)$/p' in-file
sed -n '/^D.*\(A1\|A2\|A3\)$/p' in-file
sed -n '/^D.*A[1-3]$/p' in-file
  • опция -r, --regexp-extended: используйте расширенные регулярные выражения в сценарии.

  • опция -n, --quiet, --silent: подавите автоматическую печать пространства шаблона.

  • команда p: распечатайте текущее пространство шаблона.

0
ответ дан 3 December 2019 в 06:21

Другие вопросы по тегам:

Похожие вопросы: