shell awk -忽略模式

zujrkrfu  于 2023-03-03  发布在  Shell
关注(0)|答案(4)|浏览(155)

我正在尝试用awk提取一些文本。
下面是示例文件:

some text
var x=[
        0, 1;
        1,0;
        2,1;
        3,2];
other text

因此,当我执行以下命令时:

awk '/var/ , /;/' file

本人获得:

var x=[
        0, 1;

预期结果:

var x=[
        0, 1;
        1,0;
        2,1;
        3,2];

逻辑上,前一个命令获取第一个;并打印结果。
如果;与以下正则表达式匹配,则该进程应忽略;(\[|\(|\{).*[;].*(\]|\)|\{)
你知道吗?

j5fpnvbx

j5fpnvbx1#

您可以像这样匹配];] *;

awk '/var/ , /] *;/' file

var x=[
        0, 1;
        1,0;
        2,1;
        3,2];
uurity8g

uurity8g2#

再来一杯。

awk 'BEGIN {
    RS="^$"                                         # read in the whole file
}
{
    while(match($0,/var([^]]|\]+[^];])*\]*\];/)) {  # look for var...];
        print substr($0,RSTART,RLENGTH)             # output match
        $0=substr($0,RSTART+RLENGTH)                # continue
    }
}' file

位扩展file

some text
var x=[
        0, 1;
        1,0;
        2,1;
        3,2];
other text
var x=[
        0, 1;
        1,0;
        2,1;
        3,2];
more text

输出:

var x=[
        0, 1;
        1,0;
        2,1;
        3,2];
var x=[
        0, 1;
        1,0;
        2,1;
        3,2];
zbdgwd5y

zbdgwd5y3#

mawk '/=[[]/,/[]];$/'
var x=[
        0, 1;
        1,0;
        2,1;
        3,2];

或者缩小到这样,但不太清楚

gawk '/=\[/,/];$/'
myzjeezk

myzjeezk4#

假设:

  • 没有嵌套的]
  • 每个var保证具有一对匹配的[]

一个awk创意:

$ awk '/var/,/]/' file
var x=[
        0, 1;
        1,0;
        2,1;
        3,2];

相关问题