sed로 검색한 여러 문자열만 인쇄할 수 있나요?

sed로 검색한 여러 문자열만 인쇄할 수 있나요?

정규식을 통해 여러 줄의 로그를 추출하려고 합니다.

그런데 로그파일이 너무 커서 힘드네요. (약 10GB)..

다양한 방법을 시도했지만 원하는 결과를 얻지 못했습니다.

첫 시도)

1) "숭고한 앱"에서 정규식을 사용하십시오. => 문제: 메모리 부족이 표시됩니다.

2) "슈퍼 편집 앱"에서 정규 표현식을 사용하세요. => 문제: 메모리 부족이 표시됩니다.

두 번째 시도) osx의 터미널에서 "sed" 프로그램을 사용합니다.

사용된 연산)

$sed -E -n '/.*output:[\S\s]*?AAA[\S\s]*?END.*/p' ./AppLog.txt

AAA가 키워드를 검색하고 있습니다. (사용자 ID)

"RE 오류: 잘못된 중복 연산자 피연산자"라고 표시됩니다.

AppLog.txt의 내용입니다.

:
:
DEBUG|2018-03-27,14:41:43.089|print log
DEBUG|2018-03-27,14:41:43.089|print log
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID                   = {"AAA"}  <= searching key
01 USER_NAME                 = {"N"}
02 USER_TEL                  = {"001-1234-1234"}
: 
05 USER_LOCATION             = {"earth"}
[END]
=============================================
DEBUG|2018-03-27,14:41:43.089|print log
DEBUG|2018-03-27,14:41:43.089|print log
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID                   = {"BBB"}  <= searching key
01 USER_NAME                 = {"N"}
:
03 USER_LOCATION             = {"saturn"}
[END]
=============================================
DEBUG|2018-03-27,14:41:43.089|print log
DEBUG|2018-03-27,14:41:43.089|print log
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID                   = {"AAA"}  <= searching key
01 USER_NAME                 = {"N"}
02 USER_ADDR                 = {"bla~ bla~~"}
:
010 JOB                       = {"designer"}
[END]
=============================================
:
:

원하는 결과는 다음과 같습니다.

DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID                   = {"AAA"}  <= searching key
01 USER_NAME                 = {"N"}
02 USER_TEL                  = {"001-1234-1234"}
: 
05 USER_LOCATION             = {"earth"}
[END]
=============================================
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID                   = {"AAA"}  <= searching key
01 USER_NAME                 = {"N"}
02 USER_ADDR                 = {"bla~ bla~~"}
:
010 JOB                       = {"designer"}
[END]
=============================================

답변1

pcregrep일하다:

pcregrep -M \
   'DEBUG.*output:\n===*\n.*?\n.*?USER_ID.*?"AAA".*?(\n*?.*?\n*)*?===*' AppLog.txt 

답변2

AWK--

awk -v RS='[\\=]+[\\=]' -v FS='\n' '/{"AAA"}/{ printf "%s%s%s%s",prevline,RT, $0, RT }{prevline="\n"$(NF-1)"\n"$NF}' ./AppLog.txt
  1. 레코드는 ======로 구분됩니다.

  2. 마지막 두 줄은 prevline에 저장됩니다.

  3. 이전에 저장된 값, 구분 기호, 현재 값 및 구분 기호를 다시 인쇄합니다.

답변3

awk가 더 빠른 도구일 수 있습니다. 이 [END]줄을 다음과 같이 사용하십시오.오른쪽에코코드에스쪼개는 도구:

awk -vRS='\\[END\\]' -vORS='[END]\n' '/\"AAA\"/' infile | 
awk '/output:$/,/\[END\]/'

첫 번째 행 선택오른쪽포함된 기록 "AAA".
두 번째 줄은 출력을 output:과 사이의 줄로 제한합니다 [END].

답변4

조각의 경우:

FILE=${1-data1}

# Utility functions: print-as-echo, print-line-with-visual-space.
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }

pl " Results:"
cgrep -d "/////" -w "DEBUG" +w "END" "AAA" $FILE

이는 다음과 같이 생성됩니다.

 Results:
/////
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID                   = {"AAA"}  <= searching key
01 USER_NAME                 = {"N"}
02 USER_TEL                  = {"001-1234-1234"}
: 
05 USER_LOCATION             = {"earth"}
[END]
/////
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID                   = {"AAA"}  <= searching key
01 USER_NAME                 = {"N"}
02 USER_ADDR                 = {"bla~ bla~~"}
:
010 JOB                       = {"designer"}
[END]

암호정규식텍스트 주위에 창을 지정할 수 있습니다(AAA)수색. 따라서 이 경우에는 다시 다음으로 돌아갑니다.디버그, 그리고 다음 주소로 전달됨:.

우리는 ATT 코드를 사용했습니다정규식몇 년 동안. 컴파일이 필요하지만 프로세스 중에 오류가 발생하지 않았습니다.

다음은 몇 가지 세부정보입니다.정규식:

cgrep   shows context of matching patterns found in files (man)
Path    : ~/executable/cgrep
Version : 8.15
Type    : ELF 64-bit LSB executable, x86-64, version 1 (SYS ...)
Home    : http://sourceforge.net/projects/cgrep/ (doc)

행운을 빕니다... 건배, drl

관련 정보