파일 내용에서 동일한 문자로 시작하는 이름과 성이 포함된 줄을 찾아야 하는 작업이 있습니다. 내가 시도한 모든 것은 이름의 첫 글자만 검색하거나 아무것도 출력하지 않습니다. 이 문제를 처리하는 방법에 대한 지침을 얻을 수 있습니까?
구문 분석해야 하는 데이터:
Frank Smith
Jim Jones
William Tuft
Jill Johnston
Fred White
Sue Cream
Barbara Bennett
Jeff Gordo
이 egrep 명령을 사용하여 알아냈습니다.
egrep '(J[a-z]+ J)' addresses.txt
*개인정보 보호를 위해 주소를 지웠습니다
답변1
$ grep -E '^[[:space:]]*([[:alpha:]])[[:alpha:]]*[[:space:]]+\1' yourfile.txt
이 grep
명령은 다음을 검색합니다.당신의 파일.txt을 위한:
*
줄 시작 부분에 공백 문자(0 이상을 의미), 그 뒤에 공백 문자- 정확히 하나의 알파벳 문자이고 그 뒤에는
- 임의의 수의 알파벳 문자(
*
0 이상을 의미), 그 뒤에 - 최소한 하나의 공백 문자(
+
1개 이상을 의미), 그 뒤에 - 2단계에서 일치하는 문자입니다. 이것은
\1
역참조실제 일치하는 문자열에첫 번째괄호로 묶인 표현.
참고: 다음 명령(사용기초적인바꾸다확장하다정규 표현식)은 위에 주어진 것과 동일한 효과를 갖습니다:
$ grep '^[[:space:]]*\([[:alpha:]]\)[[:alpha:]]*[[:space:]]\+\1' yourfile.txt
답변2
이름 목록이 있다고 가정합니다.
$ cat file
George Washington
Ronald Reagan
Barack Obama
Donald Trump
$ awk 'substr($1,1,1) == substr($NF,1,1)' file
Ronald Reagan
(= 성 필드)를 성으로 사용하면 $NF
중간 이름이 있으면 잘 작동하지만 Jr.
또는 같은 접미사가 있으면 비참하게 실패합니다.Mr.
Dr.
답변3
egrep '(J[a-z]+ J)' file.txt
산출:
짐 존스
질 존스턴