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