grep 탭 및 별표 문자

grep 탭 및 별표 문자

*텍스트 파일에서 탭과 별표() 문자의 조합을 찾으려면 어떻게 해야 합니까 ?

예를 들어:

입력하다:

text    *    0    *    0    *    *    some_text
text    *    9    45   9    0    0    some_text
TEXT    *    0    *    0    0    *    some_text

탭, 별표, 0의 특정 조합을 찾으려면 grep이 필요합니다. 예를 들면 다음과 같습니다.

*    0    *    0    0    *

예상 출력:

TEXT    *    0    *    0    0    *    some_text

다음을 사용하여 개별적으로 별을 찾을 수 있습니다.

grep -P '\t' input > output

다음을 사용하여 탭을 개별적으로 찾을 수 있습니다.

grep '\*' input > output

그런데 이 둘을 어떻게 결합할 수 있을까요? 나는 성공하지 못한 채 다음 조합을 시도하고 있습니다.

grep -P '\*\t0\t\*0\t0\*' input > output

답변1

가지고 다닐 수 있는:

tab=$(printf '\t')
grep -F "*${tab}0${tab}*${tab}0${tab}0"

일부 쉘( ksh93, zsh, bash, mkshFreeBSD sh)의 경우 다음을 사용할 수 있습니다.

grep -F $'*\t0\t*\t0\t0'

( 또는 (ASCII 기반 시스템에서는) 또는 로 쓸 수도 $'\t'있음 )$'\u0009'$'\x09'$'\11'$'\CI'

grepast-open과 같은 일부 구현은 자신을 탭 \t으로 인식합니다 \x09. 그래서 당신은 이것을 할 수 있습니다 :

grep '\*\t0\t\*\t0\t0'

(다른 정규식 유형과 동일합니다( -EERE의 경우, -PPerl 유사(PCRE 유사), -A부스트의 경우).

GNU grep(적어도 GNU 시스템에서는)는 \tBRE \x09또는 ERE를 인식하지 못하지만 PCRE(내장 지원되는 경우)(및 \x09또는 \11)는 인식합니다.

grep -P '\*\t0\t\*\t0\t0'

grepPCRE 지원이 활성화되어 있는 한 GNU와 함께 사용할 수 있습니다(현대 시스템에서는 종종 그렇습니다).

또 다른 이식 가능한 솔루션은 보편적으로 지원되는 대안을 사용하는 것입니다 awk.\t

awk '/\*\t0\t\*\t0\t0/'

답변2

ilkkachu의견 에 따르면 :

'*\t0\t*0\t0*'에 여러 탭이 없기 때문에: 중간에 탭이 하나 있습니다.0, 그리고 마지막으로 0.

주문하다:

grep -P '\*\t0\t\*\t0\t0'

이 문제를 해결할 것입니다.

관련 정보