나는 성공하지 못한 채 텍스트 파일에서 문자열을 포함하는 텍스트 블록을 추출하려고 했습니다. 어떤 도움이라도 대단히 감사하겠습니다.
예: 다음 내용을 포함하는 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