xem xét đầu vào:trừ dòng đầu tiên và cuối cùng từ sed/START /,/END/
=sec1=
some-line
some-other-line
foo
bar=baz
=sec2=
c=baz
Nếu tôi muốn xử lý chỉ = Sec1 = Tôi có thể ví dụ như nhận xét ra phần theo:
sed -e '/=sec1=/,/=[a-z]*=/s:^:#:' < input
... tốt, gần như.
này sẽ bình luận các dòng bao gồm "= Sec1 =" và "= sec2 =" dòng, và kết quả sẽ là một cái gì đó như:
#=sec1=
#some-line
#some-other-line
#
#foo
#bar=baz
#
#=sec2=
c=baz
Câu hỏi của tôi là: cách dễ nhất là gì loại trừ các dòng bắt đầu và kết thúc từ một/START /,/END/range trong sed?
Tôi biết rằng đối với nhiều trường hợp, sàng lọc móng vuốt "s :::" có thể đưa ra giải pháp trong trường hợp cụ thể này, nhưng tôi là giải pháp chung ở đây.
Trong "Sed - An Introduction and Tutorial" Bruce Barnett viết: "Tôi sẽ chỉ cho bạn sau cách hạn chế lệnh lên, nhưng không bao gồm dòng chứa mẫu được chỉ định", nhưng tôi không thể tìm thấy nơi anh thực sự hiển thị .
Trong "USEFUL ONE-LINE SCRIPTS FOR SED" Biên soạn bởi Eric Pement, tôi có thể tìm thấy chỉ là ví dụ bao gồm:
# print section of file between two regular expressions (inclusive)
sed -n '/Iowa/,/Montana/p' # case sensitive
Vâng, đây chính xác là những gì tôi đang được tìm kiếm. Cảm ơn. –
Đối với folks trên macOS với BSD sed bạn cần sử dụng các dòng mới thực sự thay vì dấu chấm phẩy. Để biết thêm chi tiết, hãy xem [answer] (http://stackoverflow.com/a/15470635/2909897) – mbigras
không chắc chắn về các phiên bản khác, nhưng với GNU sed, điều này có thể dễ dàng thực hiện bằng cách sử dụng ''/ = sec1 = /,/= sec2 =/{//! s/^/# /} ''... từ [thủ công] (https://www.gnu.org/software/sed/manual/sed.html#Regexp-Addresses)' biểu thức chính quy trống' // 'lặp lại biểu thức chính quy cuối cùng khớp với ' – Sundeep