Dưới đây là một ví dụ đơn giản:
$ 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
Trong lệnh đầu tiên, chỉ có trận đấu đầu tiên bị ảnh hưởng. Trong lệnh thứ hai, mọi trận đấu đều bị ảnh hưởng. Trong cả hai trường hợp, các \1
đề cập đến các ký tự bị bắt bởi dấu ngoặc đơn thoát.
Trong lệnh thứ ba, hai nhóm chụp được chỉ định. Chúng được gọi bằng cách sử dụng \1
và \2
. Có thể sử dụng tối đa chín nhóm chụp.
Ngoài các nhà điều hành g
(toàn cầu) (hoặc không có nó, các trận đấu đầu tiên), bạn có thể chỉ định một trận đấu cụ thể:
$ echo 'aaaaaa' | sed 's/a/A/4'
aaaAaa
Nguồn
2011-01-06 09:18:35
\\ 1 đang làm gì, nó có được mở rộng regex không? – Timo
Dưới đây là ví dụ về \\ 1: 'sed -E -e" s/[^ /] {10} (\\. [^ \\.] +)? $/\\ 1/"' – Timo
@Timo : '\ 1' chèn nội dung của nhóm chụp đầu tiên là kết quả khớp giữa tập hợp dấu ngoặc đơn đầu tiên. Tôi không biết liệu bạn có hỏi cụ thể về vụ việc với các dấu gạch chéo ngược tăng gấp đôi hay không, nhưng dường như nó hoạt động cho dù chúng có tăng gấp đôi hay không. Tôi sẽ không nói đó là một trường hợp của regex mở rộng bởi vì nó làm điều tương tự ngay cả khi bạn đang sử dụng regex cơ bản. –