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]”