Я испытываю затруднения при выяснении, куда поместить \
в этой команде.
grep "^D.*\(A1|A2|A3\)$" input.txt > output.txt
Я ищу каждую строку, которая запускается с a D
и концы с A1, A2 или A3, который является в конце строки.
Просто необходимо было выйти или панели - Вы были почти там:
grep "^D.*\(A1\|A2\|A3\)$"
Обратите внимание, что можно также использовать egrep вместо всех Escape:
egrep "^D.*(A1|A2|A3)$"
Необходимо выйти из каналов (|
).
$ 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
Вот 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
: распечатайте текущее пространство шаблона.