2013-04-24 39 views
9

Tôi có lệnh sed này để xóa dấu cách sau dấu phẩy.Sử dụng sed giữa các dòng cụ thể chỉ

sed -e 's/,\s\+/,/g' example.txt 

Làm thế nào tôi có thể thay đổi điều đó, nó sẽ chỉ thực hiện sửa đổi giữa các số dòng cụ thể.

(ví dụ: giữa các dòng thứ hai và thứ ba).

+1

Dòng 2.5 ......? –

+0

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. –

Trả lời

17

Sử dụng:

sed '2,3s/,\s\+/,/g' example.txt 
1
sed -e '2,3!b;s/,\s\+/,/g' example.txt 

Phiên bản này có thể hữu ích nếu sau này bạn muốn thêm các lệnh khác để xử lý các dòng mong muốn.

+2

Tôi nghi ngờ có thông tin tốt ở đây. Nhưng tôi phải thừa nhận, tôi không làm theo những gì đang xảy ra. Nó không rõ ràng với tôi tại sao '! B' và'; 'có mặt và chúng hữu ích như thế nào sau này. Có lẽ bạn có thể giải thích mọi thứ một chút. – jww

3

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 đó!

Các vấn đề liên quan