2016-09-27 16 views
1

私はマッチした改行の後に指定した単語までのすべての行を印刷したいにマッチするまで、すべての行を印刷する方法改行の後に与えられた単語が

ファイル:

[`odbcname`] 
Driver  = /`usr`/lib/`odbc`/`libmyodbc.so` 
Description = `MyODBC`3.51 Driver `DSN` 
SERVER  = my.database.server.com 
PORT   = 

[`MSSQLTestServer`] 
Driver  = `FreeTDS` 

出力:

[`odbcname`] 
Driver  = /`usr`/lib/`odbc`/`libmyodbc.so` 
Description = `MyODBC` 3.51 Driver `DSN` 
SERVER  = my.database.server.com 
PORT   = 

試しました

cat grep '^\[odbcname]|^$'` 

しかし、空白になるまですべての行を印刷する方法はわかりません。

+0

[編集ヘルプ](http://stackoverflow.com/editing-help)を参照してください。引用符を避けてください – Sundeep

答えて

2
$ awk -v RS= '/\[odbcname\]/' file 

[odbcname] 
Driver = /usr/lib/odbc/libmyodbc.so 
Description = MyODBC3.51 Driver DSN 
SERVER = my.database.server.com 
PORT = 

セットレコード段落モードへの区切り記号(例: 1つ以上の空白行)、パターンを見つけて(そして印刷する)。

+0

あなたは私のことを教えてください。\/[は働いています。 –

+0

'[...]'は、範囲、すなわち '[0-9]'、大括弧をエスケープしない場合、 "odbcname"という文字の任意の組み合わせがヘッダと一致します。例として、 '/ [cbdo] /' – karakfa

+0

を使ってみてください。ここで '$ 0 ==" [obdcname] "' – karakfa

0

awkを使用すると、このような何かを行うことができます。

$ awk '/odbcname/,NF==0' file 
[odbcname] 
Driver = /usr/lib/odbc/libmyodbc.so 
Description = MyODBC3.51 Driver DSN 
SERVER = my.database.server.com 
PORT = 

同じことを行う別の多少より多目的な方法です:sedをして

awk '/odbcname/{p=1}p;NF==0{p=0}' file 
1

$ sed -n '/^\[odbcname\]/,/^$/{/^$/d;p}' file 
[odbcname] 
Driver = /usr/lib/odbc/libmyodbc.so 
Description = MyODBC3.51 Driver DSN 
SERVER = my.database.server.com 
PORT = 
関連する問題