*
텍스트 파일에서 탭과 별표() 문자의 조합을 찾으려면 어떻게 해야 합니까 ?
예를 들어:
입력하다:
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
, mksh
FreeBSD sh
)의 경우 다음을 사용할 수 있습니다.
grep -F $'*\t0\t*\t0\t0'
( 또는 (ASCII 기반 시스템에서는) 또는 로 쓸 수도 $'\t'
있음 )$'\u0009'
$'\x09'
$'\11'
$'\CI'
grep
ast-open과 같은 일부 구현은 자신을 탭 \t
으로 인식합니다 \x09
. 그래서 당신은 이것을 할 수 있습니다 :
grep '\*\t0\t\*\t0\t0'
(다른 정규식 유형과 동일합니다( -E
ERE의 경우, -P
Perl 유사(PCRE 유사), -A
부스트의 경우).
GNU grep
(적어도 GNU 시스템에서는)는 \t
BRE \x09
또는 ERE를 인식하지 못하지만 PCRE(내장 지원되는 경우)(및 \x09
또는 \11
)는 인식합니다.
grep -P '\*\t0\t\*\t0\t0'
grep
PCRE 지원이 활성화되어 있는 한 GNU와 함께 사용할 수 있습니다(현대 시스템에서는 종종 그렇습니다).
또 다른 이식 가능한 솔루션은 보편적으로 지원되는 대안을 사용하는 것입니다 awk
.\t
awk '/\*\t0\t\*\t0\t0/'
답변2
ilkkachu
의견 에 따르면 :
'*\t0\t*0\t0*'에 여러 탭이 없기 때문에: 중간에 탭이 하나 있습니다.0, 그리고 마지막으로 0.
주문하다:
grep -P '\*\t0\t\*\t0\t0'
이 문제를 해결할 것입니다.