같은 줄에서 n 번째 다른 패턴이 발생한 후에 GREP을 사용하여 패턴을 어떻게 검색합니까?


0

파이프 ( '|')로 구분 된 레코드가있는 파일이 있습니다. 6 번째 열에서만 특정 문자열을 검색 한 다음 grep 유틸리티를 통해 전체 줄을 반환해야합니다. 총 10 개의 기둥과 9 개의 파이프가 있습니다. 아래 예제 줄에서 'G50483'을 검색해야합니다. 두 번째 레코드 만 반환해야합니다. :-

3DEAC-9AF7-4EEE-9ACD-A6E376C5727C | 2F6E92EF-8903-4E50-8A6B-7049C0A7543D ||Y| 610535 | DEFERRAL-TASK CLAIMED | RON BOW - ORD  Arv 10-SEP-2015 20:48, BOW-Line 2      Pre-Repair Recurring Deferral Task: Perform a general visual inspection of the transcowl seal P/N 1G50483 every 50FH to ensure no       additional damage is present|| GMT |11-SEP-11

26BDF-D080-4ACC-94F9-1AB39038EBF9 | 2F6E92EF-8903-4E50-8A6B-7049C0A7543D || Y |179808 | DEFERRAL-TASK CLAIMED |RON BOW - ORD  Arv 25-SEP-2015 21:46, BOW-Line 6      Pre-Repair Recurring Deferral Task: Perform a general visual inspection of the transcowl seal P/N G50483 every 50FH to ensure no        additional damage is present || GMT | 27-SEP-10

G50483 26B2F1DF-D080-4ACC-94F9-1AB39038EBF9 | 2F6E92EF-8903-4E50-8A6B-7049C0A7543D || Y |179808 | DEFERRAL-TASK CLAIMED | RON BOW - ORD  Arv 25-SEP-2015 21:46, BOW-Line 6       Pre-Repair Recurring Deferral Task: Perform a general visual inspection of the transcowl seal P/N 3G50483 every 50FH to ensure no       additional damage is present|| GMT | 27-SEP-05

답변:


0

그것이 있어야하는 경우 grep:

grep -Em2 "([^|]+|){6}[^|]+G50483.*' file | tail -n1
  • -E 확장 정규 표현식을 활성화합니다
  • -m2 두 번째 경기에서 멈춤
  • '...' 정규식
    • [^|]+|+파이프 |와 파이프가 아닌 하나 이상의 ( ) 문자를 검색합니다 .
    • (...){6}이 작업은 6 번 연속으로 수행되므로 7 번째 필드에 있습니다. 귀하의 질문에 6 번째 필드가 언급되어 있지만 입력 예제로 인해 7 번째 필드를 가정했습니다. {5}원하는 경우로 변경하십시오 .
    • [^|]+ 이제 마지막 검색 패턴까지 파이프가 아닌 문자를 다시 검색합니다.
    • G50483 실제 패턴
  • tail -n1때문에, 필요한 grep만 만 n 번째 선두로부터 인쇄 할 수 없습니다, tail다른 선두로부터 단지 2 일 appreas를 잘라냅니다.

완벽하게 작동하며 자세한 설명을 제공합니다. 그것은 명확하고 매우 교육적입니다!
Krishna V

0

유닉스에서는 툴킷을 제공하기 때문에 작업에 적합한 툴을 선택해야합니다. grep 은 전체 라인에서 작동합니다. 대신 awk를 사용하십시오.

awk -F "|" '$6 ~ /G50483/ { print $2; }'
  • -F필드 분리기 "|" 이 경우
  • $6 검색 할 열입니다.
  • ~ 패턴과 일치합니다 (정확한 일치에 ==를 사용할 수 있음)
  • /pattern/ 검색 패턴
  • $2-두 번째 필드 ( $0모든 줄)

자세한 정보는 여기 : 효과적인 AWK 프로그래밍-4e .


OP는 두 번째 필드를 원하고 구분 기호는 콜론이 아닌 파이프라고 생각합니다. awk -F \ | '$ 6 ~ / G50483 / {인쇄 $ 2; } '
Archemar

예, 그가 잘라내어 붙여 넣기를하기를 원했습니다

솔루션은 완벽하게 작동합니다! 이 대체 솔루션에 대해 대단히 감사합니다. 설명도 매우 교육적입니다.
Krishna V
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.