구분 기호가 처음 나타날 때 문자열 분할

구분 기호가 처음 나타날 때 문자열 분할

많은 로그 파일에서 일부 ID를 검색하기 위해 쉘(bash)에서 grep을 실행합니다.

grep "100200300" my.log*

결과는 다음과 같습니다.

my.log:Jan 17 15:04:52 100200300 ok
my.log.1:Jan 17 14:35:17 100200300 failed

이제 출력에서 ​​파일 이름을 제거하고 싶습니다. 그러면 ":"이 처음 나타날 때 이 텍스트를 분할하고 두 번째 부분을 출력하려면 어떻게 해야 합니까?

답변1

Steeldriver가 언급했듯이 선호되는 방법은 -h( --no-filename) 옵션을 사용하는 것입니다. 구현에 grep이 옵션이 포함되지 않은 경우 출력을 사용 sed하거나 cut변경할 수 있습니다.

grep [OPTIONS] PATTERN [FILE...] | sed 's/[^:]*://'
grep [OPTIONS] PATTERN [FILE...] | cut -d : -f 2-

그러나 이 해결 방법은 콜론( )이 포함된 파일 이름을 손상시키므로 보편적이지 않습니다 :.

답변2

이렇게 하면 이 질문의 제목에서 요구하는 작업이 수행됩니다. "구분 기호가 처음 나타날 때 문자열 분할"

#!/bin/bash
while read -r line; do
    [[ $line =~ :(.*) ]] && echo "${BASH_REMATCH[1]}"
done <<<"$(grep "100200300" my.log*)"

그러나 나는 당신에게 필요한 것이 다음과 같다고 믿습니다:

grep -h "100200300" my.log*

-h옵션을 사용하면 파일 내용이아니요파일 이름:

Jan 17 15:04:52 100200300 ok
Jan 17 14:35:17 100200300 failed

답변3

다음을 수행하여 파일 이름을 제거할 수도 있습니다.

cat my.log* | grep "100200300"

관련 정보