2016-09-27 40 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   = 
我試過

但我不知道如何打印所有行,直到空的空間。

+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 = 

設置記錄分隔符到段落模式(即,一條或多條空行),找到模式(並打印)。

+0

請你解釋一下鋤頭中的字符/ \ [正在工作 –

+0

'[...]'定義了一個char範圍,即'[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 = 

另一個稍微更靈活的方式做同樣的事情:

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

使用sed:

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