중괄호 안의 내용을 찾는 방법

중괄호 안의 내용을 찾는 방법

파일이 있습니다:

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

관련 정보