나는
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