最初の一致する括弧の間の内容を印刷します。

最初の一致する括弧の間の内容を印刷します。

入力例:

START{
    some text

    {
      more text}
almost there
}
nothing important{
...

希望の出力:

START{
    some text

    {
      more text}
almost there
}

最初の開いたブラケットは別の位置にある可能性があります。

START{...
START {...
START
{...

先頭には特殊文字を含めることもできます。例: *

{}STARTから始まるすべての内容と最初の一致の間のすべての内容(bash)を印刷したいと思います。私はそれが見つかると増加し{、見つかると減少するカウンターを持つと思います}。結果が0の場合は印刷を停止します(中括弧は常に一致します)。

ベストアンサー1

すべてのUnixシステムのすべてのシェルで任意のawkで動作する簡単な無差別方法:

$ cat tst.awk
s=index($0,"START") { $0=substr($0,s); f=1 }
f { rec = rec $0 RS }
END {
    len = length(rec)
    for (i=1; i<=len; i++) {
        char = substr(rec,i,1)
        if ( char == "{" ) {
            ++cnt
        }
        else if ( char == "}" ) {
            if ( --cnt == 0 ) {
                print substr(rec,1,i)
                exit
            }
        }
    }
}

$ awk -f tst.awk file
START{
    some text

    {
      more text}
almost there
}

おすすめ記事