Kể từ OSX (BSD sed) có một số khác biệt cú pháp để linux (GNU) sed, nghĩ rằng tôi muốn thêm những điều sau đây từ một số ghi chú cứng-won của tôi:
OSX (BSD) SED tìm/thay thế trong thời hạn (địa chỉ) khối (bắt đầu và các mẫu điểm kết thúc (/../) hoặC# s line) trong cùng một tập tin (via & via & via & phần 4.20 here):
Cú pháp:
$ sed '/start_pattern/,/end_pattern/ [operations]' [target filename]
Chuẩn tìm/thay thế ví dụ:
$ sed -i '' '2,3 s/,\s\+/,/g' example.txt
$ sed -i '' '/DOCTYPE/,/body/ s/,\s\+/,/g' example.txt
tìm/thay thế ví dụ với nhà điều hành phức tạp và nhóm (không thể hoạt động mà không nhóm cú pháp do dòng sử dụng đầu vào tiêu chuẩn). Tất cả các báo cáo trong nhóm phải nằm trên dòng riêng biệt, hoặc ly thân w/dấu chấm phẩy:
Complex điều hành Ví dụ (sẽ xóa toàn bộ dòng chứa một trận đấu):
$ sed -i '' '2,3 {/pattern/d;}' example.txt
Multi-tập tin tìm + sed:
$ find ./ -type f -name '*.html' | xargs sed -i '' '/<head>/,/<\/head>/ {/pattern/d; /pattern2/d;}'
Hy vọng điều này sẽ giúp ai đó!
Dòng 2.5 ......? –
Các số dòng cụ thể đó có được biết tại điểm khi bạn gọi sed hay có các vùng trong tệp phụ thuộc vào dữ liệu không? Giống như sed nên được hoạt động chỉ giữa một số bắt đầu và kết thúc đánh dấu? Trong trường hợp đó tôi sẽ sử dụng 'awk', bởi vì bạn có thể giữ các biến trạng thái giữa các dòng. –