Tôi không đặc biệt quen thuộc với khả năng tìm kiếm và thay thế của Notepad ++, nhưng Unix sed
khá giống nhau.
Tôi tin rằng không có cách nào bạn có thể nhận được chính xác kết quả mà bạn muốn với chính xác chuỗi thay thế bạn thấy, bởi vì bạn muốn không gian trước khi những cái tên Tây Ban Nha ( Maria
, Juan
, vv), nhưng không có dấu cách như hiện diện trong văn bản đầu vào. Bạn sẽ cần thêm ít nhất một khoảng trắng vào chuỗi thay thế.
Các -r
tùy chọn kể sed
để sử dụng “biểu thức thông thường mở rộng”. Chúng tôi hoàn toàn không cần lựa chọn đó, nhưng
sed
(theo mặc định) sử dụng (
và )
để khớp với dấu ngoặc đơn và \(…\)
để bắt một nhóm, trong khi
sed -r
sử dụng \(
và \)
để khớp với dấu ngoặc đơn và (…)
bắt một nhóm.
Bạn dường như đang mong đợi có thể sử dụng (…)
để chụp một nhóm, vì vậy tôi sẽ làm điều này với -r
.
Bạn có thể làm điều này là một thay thế duy nhất trong sed
với
sed -r 's/\s([A-Za-z]*)\s\(([A-Za-z]*)\)(,| and)*/\n\1 = \2/g'
Điều đó có thể được chia thành
sed -r 's/ \s ([A-Za-z]*) \s \( ([A-Za-z]*) \) (,| and)? / \n\1 = \2 /g'
s/
- bắt đầu một lệnh thay thế.
\s
- một không gian. Trong sed
, bạn có thể sử dụng các ký tự không gian thực tế; Tôi nghi ngờ điều đó cũng đúng với Notepad ++. Trong sed
bạn cũng có thể sử dụng [[:space:]]
. Tất nhiên một không gian phù hợp chỉ là một không gian, nhưng \s
và [[:space:]]
không gian phù hợp hoặc tab.
([A-Za-z]*)
- một nhóm bắt giữ của bất kỳ số lượng chữ cái (chữ hoa hoặc chữ thường), để phù hợp với phiên bản tiếng Anh của tên. Trong sed
bạn cũng có thể sử dụng [[:alpha:]]
( [[:upper:]]
hoặc [[:lower:]]
, như mong muốn).
\s
- một không gian khác.
\(
- dấu ngoặc đơn bên trái (chữ cái trước phiên bản tiếng Tây Ban Nha của tên).
([A-Za-z]*)
- giống như trên - một nhóm bắt giữ bất kỳ số lượng chữ cái nào (chữ hoa hoặc chữ thường), để khớp với phiên bản tên tiếng Tây Ban Nha.
\)
- một dấu ngoặc đơn bên phải theo nghĩa đen (cái sau phiên bản tiếng Tây Ban Nha của tên).
(,| and)?
- một nhóm phù hợp ,
hoặc and
, không hoặc một lần. Điều này khớp với nội dung nằm giữa dấu ngoặc đơn bên phải sau tên phiên bản tiếng Tây Ban Nha và tên phiên bản tiếng Anh tiếp theo. Chúng tôi cần có khả năng xử lý số lần xuất hiện của nhóm này vì chúng tôi cần khớp Joseph (Jose)
, mặc dù sau đó không có dấu phẩy hoặc Thời gian and
.
Lưu ý rằng chúng ta có thể sử dụng \sand
thay vì and
; Tôi tin rằng and
nó dễ đọc hơn nhiều. Cũng lưu ý rằng chúng ta có thể sử dụng *
(không hoặc nhiều hơn, không giới hạn) thay vì ?
.
/
- kết thúc chuỗi tìm kiếm; bắt đầu chuỗi thay thế.
\n\1 = \2
- chuỗi thay thế của bạn (dòng mới, nhóm chụp đầu tiên =
và nhóm chụp thứ hai). Như đã đề cập trước đó, tôi đã thêm khoảng trắng trước và sau =
.
/g
- kết thúc lệnh. Chữ g
viết tắt của từ toàn cầu, và chỉ định rằng việc thay thế phải được thực hiện nhiều lần nhất có thể (mặc định là một lần trên mỗi dòng).
Vì vậy, lệnh Notepad ++ có lẽ rất giống nhau.