gpt4 book ai didi

regex - 匹配的花括号之间的 sed 匹配

转载 作者:行者123 更新时间:2023-12-04 11:02:17 25 4
gpt4 key购买 nike

我有以下文件:

Items{
Item{
car "blue"
tire 4
}
Item{
car "yellow"
tire 0
}
}
Orders{
Order{
ID 123
Cost 123
}
Order{
ID 231
Cost 2
}
}

我需要 在 sed 匹配 Items{ 和该组的最后一个匹配 } 之间的所有内容......就像现在我可以这样做:
sed -n /Items/,/^\}/p

问题是,该文件对空间不敏感,子类别的其他方括号也可以在行的开头......知道如何普遍匹配它吗?它需要在 sed 中,因为我稍后需要“匹配”来精确定位编辑...

编辑了示例文件

最佳答案

您几乎没有选择来解决问题

  • 将文件转换为标准格式(XML、JSON),并使用标准工具(xml、xsltproc 或 jq)解析文件。
  • 漂亮地打印文件,然后使用缩进来识别块的结尾。
  • 编写自定义标记器,并计算开/关大括号。

  • 使用 perl 进行 #2构建 pretty-print 格式器。可以使用任何工具(sed、awk、...)进行提取。
    perl pp-data.pl filename.txt | sed -n 'sed -n '/^Items/,/^}/p'
    #! /usr/bin/perl
    # pp-data.pl
    use strict ;
    my $d = eval { local $/ ; <> } ;
    my $l = 0 ;
    my $n = 0 ;
    while ( $d =~ /({|}|\w+|"[^"]*")/g ) {
    my $w = $1 ;

    $l-- if $w eq '}' ;

    print $n ? " " : (" " x ($l * 2)), $w ;
    $n++ ;

    if ( $w eq "{" ) {
    $l++ ;
    $n = 0 ;
    } elsif ( $w eq "}" ) {
    $n = 0 ;
    } elsif ( $n == 2 ) {
    $n = 0 ;
    } ;
    print "\n" unless $n ;
    } ;
    1;

    对于答案中的输入,解析后的输出将如下所示:
    Items {
    Item {
    car "blue"
    tire 4
    }
    Item {
    car "yellow"
    tire 0
    }
    }
    Orders {
    Order {
    ID 123
    Cost 123
    }
    Order {
    ID 231
    Cost 2
    }
    }

    关于regex - 匹配的花括号之间的 sed 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58728193/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com