在给定单词匹配后如何打印所有行直到换行符

时间:2016-09-27 16:09:26

标签: linux awk sed grep

我希望在给定单词匹配

后打印所有行直到换行符

文件:

[`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]|^$'`

但我不知道如何打印所有行直到空白区域。

3 个答案:

答案 0 :(得分: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 :(得分: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 =

答案 2 :(得分: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