텍스트 파일에서 특정 문자열이 포함된 텍스트 블록을 찾는 방법

텍스트 파일에서 특정 문자열이 포함된 텍스트 블록을 찾는 방법

나는 성공하지 못한 채 텍스트 파일에서 문자열을 포함하는 텍스트 블록을 추출하려고 했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

예: 다음 내용을 포함하는 xyz라는 파일이 있습니다.

10:10:10 ::  blah blah blah
10:10:10 ::  blah blah blah
10:10:11 ::  $VAR1 = {
10:10:11 ::     'Id' = 'A0001'
10:10:11 ::     'Name' => 'Smith'
10:10:12 ::     'Age' => '21'
10:10:12 ::  };
10:10:12 ::  blah blah blah
10:10:12 ::  blah blah blah
10:10:14 ::  $VAR1 = {
10:10:14 ::     'Id' = 'A0002'
10:10:15 ::     'Name' => 'Jane'
10:10:15 ::     'Age' => '18'
10:10:15 ::  };
10:10:15 ::  blah blah blah
10:10:16 ::  blah blah blah
10:10:16 ::  $VAR1 = {
10:10:16 ::     'Id' = 'A0003'
10:10:16 ::     'Name' => 'Adams'
10:10:16 ::     'Age' => '25'
10:10:16 ::  };

A0002가 포함된 $VAR1과 } 사이의 텍스트 블록을 추출하고 싶습니다. 따라서 sed/grep/awk의 결과는 다음과 같습니다.

10:10:14 ::  $VAR1 = {
10:10:14 ::     'Id' = 'A0002'
10:10:15 ::     'Name' => 'Jane'
10:10:15 ::     'Age' => '18'
10:10:15 ::  };

지금까지 다음을 사용하여 $VAR1과 } 사이의 모든 텍스트 블록을 성공적으로 추출했습니다.

sed -n "/VAR1/,/};/p" xyx

다음을 반환합니다. 다음을 포함하는 텍스트 A0002를 필터링하는 방법이 있습니까?

10:10:11 ::  $VAR1 = {
10:10:11 ::     'Id' = 'A0001'
10:10:11 ::     'Name' => 'Smith'
10:10:12 ::     'Age' => '21'
10:10:12 ::  };
10:10:14 ::  $VAR1 = {
10:10:14 ::     'Id' = 'A0002'
10:10:15 ::     'Name' => 'Jane'
10:10:15 ::     'Age' => '18'
10:10:15 ::  };
10:10:16 ::  $VAR1 = {
10:10:16 ::     'Id' = 'A0003'
10:10:16 ::     'Name' => 'Adams'
10:10:16 ::     'Age' => '25'
10:10:16 ::  };

답변1

입력을 한 줄에 하나의 레코드로 변경하고 grep을 사용합니다. 예를 들면 다음과 같습니다.

cat input.txt | tr '\n' ' ' | tr ';' '\n' | egrep A0002

관련 정보