다음과 같은 파일이 있습니다.
chs_de_le_q1gg
dsdas_212
sdasd_4567
weqwe_32323
dasds_232322
rr_F3r4
we_ff
asdasd_1_fff
sdfsd_tr
dsd_fr
길이가 4-8로 끝나는 줄을 삭제해야 합니다. ff와 fr로 끝나는 줄도 삭제할 수 있습니다.
숫자와 문자를 동시에 입력할 수 없습니다
cat test.txt | grep -vE "_[0-9]|[^0-9][0-9]{1,8}$\|_ff$|_fr$"
누구든지 도와줄 수 있나요?
산출
dsdas_212
chs_de_le_q1gg
rr_F3r4
asdasd_1_fff
sdfsd_tr
답변1
찾고 있는 확장 정규 표현식:
_[[:digit:]]{4,8}$
_f[fr]$
따라서 grep을 사용하십시오.
grep -Ev -e '_[[:digit:]]{4,8}$' -e '_f[fr]$' test.txt
-i
또는 sed를 사용하여 변경 사항을 파일에 직접 적용하도록 추가할 수 있습니다.
sed -E -e '/_[[:digit:]]{4,8}$/d' -e '/_f[fr]$/d' test.txt
-E
확장 정규식 사용- grep은
-e
주어진 모든 패턴을 검색합니다. - sed는
-e
실행할 명령에 스크립트를 추가합니다. [:digit:]
숫자{4,8}
4시부터 8시까지$
줄 끝[fr]
f
어느 쪽이든r
정규식도 추가해야 하는 경우 -e
정규식과 함께 추가해야 합니다. 원하는 만큼 추가할 수 있으므로 -e
정규식을 너무 복잡하게 만들지 마십시오. 따라서 귀하의 경우에는 br, bd, rt를 추가할 수 있습니다.
_br$
_bd$
_rt$
답변2
.*(\d{4,8}$|f[fr]$)
이는 "줄 끝($)에 임의 개수의 문자(.*) 뒤에 4-8자리 숫자(\d{4-8)가 오거나($) f 뒤에 f 또는 r 중 하나가 오는(f[fr)"을 의미합니다. ] ) 줄 끝에서 Tail(4)"
더 간단하고 확장 가능한 방법:
.*(\d{4,8}|ff|fr|br|cu)$
일반적으로 새로운 엔딩은 () 안에 넣고 다른 "|"로 구분하여 추가할 수 있습니다.
나는 가서이 문제를 해결했습니다.https://regex101.com/, 샘플 파일을 드롭하고 몇 분간 시간을 보내보세요.이것은 훌륭한 도구입니다.