中かっこ内の内容を見つける方法

中かっこ内の内容を見つける方法

ファイルがあります:

   [{ 
    abc
    def
    123
   }]
    
[{
    abc
    456
    789
}]

var="789" find (grep sed ...) $var が結果中括弧を返したいと思います。

        {
                abc
                456
                789
        }
    
or
       [{
            abc
            456
            789
        }]
    
or
            abc
            456
            789

試しましたが、grep '[.*${var}.*]' file結果が返されました。

{ 
        abc
        def
        123
       }
        
    {
        abc
        456
        789
    }

ベストアンサー1

ブロックが空白行で区切られている場合は、「段落」モードでファイルを読み取ることができます。

awk -v RS="" '/789/' file

ここで示すように、ブロックが「空」行(区切り線のタブまたはスペース)で区切られている場合、レコード区切り文字はより複雑になります。

awk -v RS='\n([[:blank:]]+\n)+' '/789/' file

パターンを変数として渡すには:

awk -v RS="" -v patt="$var" '$0 ~ patt' file

おすすめ記事