Ecco un semplice esempio:
$ echo 'abcabcabc' | sed 's/\(ab\)c/\1/'
ababcabc
$ echo 'abcabcabc' | sed 's/\(ab\)c/\1/g'
ababab
$ echo 'abcabcabc' | sed 's/\(ab\)\(c\)/\1d\2/g'
abdcabdcabdc
Nel primo comando, solo la prima partita è interessato. Nel secondo comando, ogni match è interessato. In entrambi i casi, \1
fa riferimento ai caratteri catturati dalle parentesi di escape.
Nel terzo comando, vengono specificati due gruppi di cattura. Sono indicati con \1
e \2
. È possibile utilizzare fino a nove gruppi di cattura.
Oltre all'operatore g
(globale) (o senza di essa, la prima partita), è possibile specificare una partita particolare:
$ echo 'aaaaaa' | sed 's/a/A/4'
aaaAaa
fonte
2011-01-06 09:18:35
Che cosa fa \\ 1, è un'espressione regolare? – Timo
Ecco un esempio per \\ 1: 'sed -E -e" s/[^ /] {10} (\\. [^ \\.] +)? $/\\ 1/"' – Timo
@Timo : '\ 1' inserisce il contenuto del primo gruppo di cattura che corrisponde alla prima serie di parentesi. Non so se stai chiedendo in particolare il caso con i backslash raddoppiati, ma sembra funzionare se sono raddoppiati o meno. Non direi che è un caso di regex estesa perché fa la stessa cosa anche quando si utilizza la regex di base. –