Grep 필터를 사용하여 줄의 시작 부분만 표시

Grep 필터를 사용하여 줄의 시작 부분만 표시

(MacOSX를 사용하며 이를 Perl 스크립트로 변환할 수 있습니다). 저는 Linux/Unix 명령을 처음 접했고 Google 검색에 실패했습니다.

누군가의 훈련 기록을 빠르게 검색하기 위한 스크립트를 작성 중입니다. 내가 수행하는 방법은 개인의 훈련 기록을 한 행에 나열하는 것입니다(더 좋은 방법이 있을까요?). Grep을 사용하여 특정 이름, 훈련 위치 또는 날짜를 검색하면 전체 행이 표시됩니다. 특정 문자열을 검색하여 줄의 시작 부분(예: 처음 2개 단어(이름/성))만 표시하고 싶습니다.

Training.txt 파일은 다음과 유사합니다.

Ivie, Shawn Cashier 2016년 5월 24일 Storeroom 2016년 12월 2일 헬프 데스크 2016년 11월 31일

Alan, Adam Cashier 2016년 5월 10일 Storeroom 2016년 12월 13일

마르티네즈, 제시카 계산원 2017년 5월 20일 창고 2016년 10월 29일 감독자 2016년 1월 23일

지금 사용하고 있는 명령은 다음과 같습니다. grep "Cashier" Training.txt

3개의 레코드, 즉 모든 레코드의 전체 행을 모두 반환합니다.

나는 시도했다: grep -E -o ".{0,0}Cashier.{0,5}" Training.txt

(이 경우 3개 레코드 모두) 반환되지만 "Cashier" 앞에는 0자가 표시되고 "Cashier" 뒤에는 5자가 표시됩니다.

Cashier 5/10

grep(또는 Perl 명령)을 결합하여 "Supervisor"를 검색하고 처음 2개 단어(이름)만 표시하려면 어떻게 해야 합니까? 둘째: 이런 종류의 프로세스를 더 쉽게 만드는 방법에 대한 아이디어가 있습니까? (이 경우 스프레드시트는 쓸모가 없습니다).

답변1

이것은 다음과 같은 경우에 좋습니다 awk.

awk '/Supervisor/ { print $1, $2 }' /path/to/inputfile

실수로 "Supervisor Bob"이라는 사람에게 등록하는 일이 없도록 검색을 세 번째 필드로 제한할 수도 있습니다.

awk '$3 ~ /Supervisor/ { print $1, $2 }' /path/to/inputfile

답변2

grep다음 모드에서 사용할 수 있습니다 Perl.

grep -oP '^(\S+,?\s+){2}(?=Cashier\s)'

결과

Ivie, Shawn
Allen, Adam
Martinez, Jessica

피복재

  • Perl 모드에서 grep은 줄 시작 부분(\S+)에서 두 개의 필드를 찾습니다.
  • 두 번째 필드의 공백 끝에 서서 계산원과 공백이 보이면 일치하는 항목을 찾은 것입니다. Cashier 문자열은 둘러보기이므로 일치 항목에 포함되지 않습니다.

관련 정보