글자 뒤에 공백과 구두점을 찾기 위해 grep하는 방법은 무엇입니까?

글자 뒤에 공백과 구두점을 찾기 위해 grep하는 방법은 무엇입니까?

나는

10909101 - testingName - Log8767, File787 - 8:50PM  

testingName이제 grep을 사용하여 출력을 얻고 싶습니다 .

첫 번째 숫자의 자릿수는 다양할 수 있으므로(다른 행이 12첫 번째 숫자가 될 수 있음) 숫자 기반 grep을 사용할 수 없습니다. 그렇다면 이 문제를 어떻게 해결해야 할까요?

답변1

모든 데이터가 동일한 형식이라는 점을 고려하면 grep이는 잘못된 도구입니다. 물론, 사용할 수 있지만 사용하는 것은 번거롭습니다. grep원래 설계된 용도가 아니며 더 나은 도구는 입니다 awk.

구분 기호는 항상 "공백, 대시, 공백" 순서이므로 -다음과 같이 할 수 있습니다.

$ awk -F' - ' '{print $2}' <filename>

<filename>검색 중인 데이터가 포함된 파일의 이름은 어디에 있습니까? 전체 파일의 모든 줄을 두 번째 항목으로 잘라서 얻을 수 있습니다. 세 개의 문자 구분 기호를 사용하고 싶지 않다면 다음과 같이 할 수 있습니다.

$ awk -F- '{print $2}' | tr -d ' '

공백을 포함하여 첫 번째부터 두 번째까지의 -모든 항목을 잡고 공백을 제거합니다 tr. 물론 파일 이름에 공백이 있으면 문제가 발생하므로 첫 번째 예를 따라야 합니다.

답변2

이는 다음을 사용합니다.인스턴스 grep이지만,순수한 grep:

echo '10909101 - testingName - Log8767, File787 - 8:50PM  ' | \
grep -o '\- [[:alpha:]]* \-' | grep -o '[[:alpha:]]*'

산출:

testingName

관련 정보