Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何打印所有行,直到给定单词匹配后换行_Linux_Awk_Sed_Grep - Fatal编程技术网

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

Linux 如何打印所有行,直到给定单词匹配后换行,linux,awk,sed,grep,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`

我想打印所有行,直到给定单词匹配后换行

文件:

[`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         =
输出:

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

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

使用
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
对于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 =

将记录分隔符设置为段落模式(即一个或多个空行),找到模式(并打印)。

请参阅,避免引用。请解释一下,如果不将字符“odbcname”的任何组合转义到括号中,字符/[正在工作,
[…]
定义了一个字符范围,即
[0-9]
将与标题匹配。例如尝试使用
/[cbdo]/
此处当然也可以使用相等
$0==“[obdcname]”