У наступному прикладі sed
збігаються рядки, що починаються з a a
або a, c
і друкується перший символ цього рядка ( a
або c
):
$ echo "ag
bh
ci
dj
ek
fl" | sed 's/\(a\|c\)./\1/' # Matches lines starting with 'a' or 'c'.
output:
a
bh
c
dj
ek
fl
Однак лінії, що не відповідають шаблону, також роздруковуються. Як я можу sed
опустити рядки, які не відповідають шаблону? Я можу отримати бажаний ефект, комбінуючи його grep
(далі), але хотілося б знати, чи sed
можна досягти цього "сам собою".
$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'
output:
a
c
Не має значення для того, що ви насправді хотіли знати, але ваш шаблон повинен починатися з ^, тому він прив’язаний до початку рядка. Як закодовано, воно відповідатиме a або c в будь-якій точці, доки це не останній символ.
—
Джо