2012-11-01 73 views
3

我有以下文本文件:SED打印行正則表達式

text 
START 
This 
has 
to 
be 
printed 
STOP 
more text 

現在我想打印在開始和停止之間的文本。 我寫道:

cat file | sed '/START/,/STOP/p' 

但是,這似乎並沒有做我想要什麼。有什麼建議麼?

+0

UUOC獎待定 - cat'的'無用使用。 –

回答

5

如果你想之間打印的啓動和停止的跡象,嘗試:

sed -n '/START/,/STOP/ { //!p }' file.txt 

結果:

This 
has 
to 
be 
printed 
+1

另外'sed'/ START /,/ STOP /!d; // d'file'也是一樣的。 – potong

+0

@steve你能解釋一下正則表達式'{//!p}'嗎? – jvermeulen

+0

@ user1790040:謝謝。 '//!p'可以分成兩位。 ''表示匹配'sed'的模式空間中的所有內容,'!p'表示'sed'打印所有不包含模式的內容。另一種方法是:'sed -n'/ START /,/ STOP/{/ START/n;/STOP /!p}'file.txt'。它有點冗長,會告訴'sed'跳過包含'START'的行並打印所有不包含'STOP'的內容。 HTH。 – Steve

3
cat file | sed -n '/START/,/STOP/p' 

-n需要禁用sed的默認打印。

+3

'sed'不需要從'STDIN'讀取,所以'貓'是沒有必要的。 – 2012-11-01 12:36:45