2012-07-28 26 views
8

Tôi cần trợ giúp bằng cách sử dụng sed để nhận xét một dòng phù hợp và 4 dòng theo sau nó. trong tệp văn bản.sed - nhận xét một dòng phù hợp và x dòng sau nó

tập tin văn bản của tôi là như thế này:

[myprocess-a] 
property1=1 
property2=2 
property3=3 
property4=4 

[anotherprocess-b] 
property1=gffgg 
property3=gjdl 
property2=red 
property4=djfjf 

[myprocess-b] 
property1=1 
property4=4 
property2=2 
property3=3 

Tôi muốn tiền tố # để tất cả các dòng có chữ '[myprocess' và 4 dòng sau nó đầu ra mong đợi:

#[myprocess-a] 
#property1=1 
#property2=2 
#property3=3 
#property4=4 

[anotherprocess-b] 
property1=gffgg 
property3=gjdl 
property2=red 
property4=djfjf 

#[myprocess-b] 
#property1=1 
#property4=4 
#property2=2 
#property3=3 

Rất cảm kích sự giúp đỡ của bạn về điều này.

Trả lời

13

Bạn có thể làm điều này bằng cách áp dụng một biểu thức chính quy để một tập các dòng:

sed -e '/myprocess/,+4 s/^/#/' 

này phù hợp với dòng với 'myprocess' và 4 dòng sau họ. Đối với 4 dòng đó, sau đó chèn '#' vào đầu dòng.

(Tôi nghĩ rằng đây có thể là một phần mở rộng GNU - nó không phải trong bất kỳ cơ chế "một liner sed" cheatsheet tôi biết)

+0

'sed: -e biểu hiện # 1, char 12: bất ngờ '' ':-( – Mausy5043

+0

Phiên bản nào của thấy Tỷ lệ là cũ hoặc không có phần mở rộng của gnu – Flexo

+0

sed 4.2.2. Đó là mặc định của Debian, vâng, có thể thiếu phần mở rộng của GNU – Mausy5043

2
sed '/\[myprocess/ { N;N;N;N; s/^/#/gm }' input_file 
Các vấn đề liên quan