Bạn có thể sử dụng perl one-liners giống như bạn làm với sed, với lợi thế là hỗ trợ biểu thức chính quy perl đầy đủ (mạnh hơn nhiều so với những gì bạn nhận được với sed). Cũng có rất ít biến thể trên các nền tảng * nix - perl thường là perl. Vì vậy, bạn có thể ngừng lo lắng về cách làm cho phiên bản sed của hệ thống cụ thể của bạn làm những gì bạn muốn.
Trong trường hợp này, bạn có thể làm
perl -pe 's/(regex)/\n$1/'
-pe
đặt perl vào một vòng lặp "thực thi và in", giống như chế độ hoạt động bình thường của sed.
'
trích dẫn mọi thứ khác để vỏ không can thiệp
()
xung quanh regex là một toán tử nhóm. $1
ở phía bên phải của sự thay thế in ra bất cứ điều gì phù hợp bên trong các parens này.
Cuối cùng, \n
là một dòng mới.
Bất kể bạn đang sử dụng dấu ngoặc đơn như là một toán tử nhóm, bạn phải thoát khỏi bất kỳ dấu ngoặc đơn nào bạn đang cố gắng khớp. Vì vậy, một biểu thức chính quy để khớp với mẫu bạn liệt kê ở trên sẽ giống như
\(\d\d\d\)\d\d\d-\d\d\d\d
\(
hoặc \)
phù hợp với một paren nghĩa đen, và \d
phù hợp với một chữ số.
Tốt hơn:
\(\d{3}\)\d{3}-\d{4}
Tôi tưởng tượng bạn có thể tìm ra những con số trong niềng răng đang làm gì.
Ngoài ra, bạn có thể sử dụng các dấu phân cách khác hơn / cho biểu thức chính quy của bạn. Vì vậy, nếu bạn cần khớp / bạn sẽ không cần phải thoát nó. Một trong những điều dưới đây tương đương với regex ở đầu câu trả lời của tôi. Về lý thuyết, bạn có thể thay thế bất kỳ ký tự nào cho tiêu chuẩn / 's.
perl -pe 's#(regex)#\n$1#'
perl -pe 's{(regex)}{\n$1}'
Một vài suy nghĩ cuối cùng.
sử dụng -ne
thay vì -pe
hành động tương tự, nhưng không tự động in ở cuối. Nó có thể hữu ích nếu bạn muốn tự in. Ví dụ: đây là một grep-alike ( m/foobar/
là một trận đấu regex):
perl -ne 'if (m/foobar/) {print}'
Nếu bạn đang tìm cách xử lý các dòng mới rắc rối và bạn muốn nó được xử lý một cách kỳ diệu cho bạn, hãy thêm -l
. Mặc dù không hữu ích cho OP, người đã làm việc với các dòng mới.
Tiền thưởng - nếu bạn đã cài đặt gói pcre, nó đi kèm pcregrep
, sử dụng các biểu thức tương thích hoàn toàn với perl.
sed '/regex/G'