如何查找大括号中的内容

如何查找大括号中的内容

我有一个文件:

   [{ 
    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

答案2

要将模式作为变量传递:

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

它返回结果作为原始值:

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

相关内容