파일에서 숫자와 문자 제거

파일에서 숫자와 문자 제거

다음과 같은 파일이 있습니다.

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/, 샘플 파일을 드롭하고 몇 분간 시간을 보내보세요.이것은 훌륭한 도구입니다.

관련 정보