우분투에서 파일의 특정 문자를 반복적으로 삭제합니다.

우분투에서 파일의 특정 문자를 반복적으로 삭제합니다.

8000개의 이상한 파일이 있는데 정리해야 합니다. 현재 이 sed 명령을 사용하여 특정 문자를 원하는 문자로 바꾸고 있습니다.

find . -name "*.txt" -print | xargs sed -i 's/a/z/g'

이는 모든 파일의 모든 a를 z로 재귀적으로 변경합니다. 내 질문은 다음과 같습니다

  1. z로 변경되는 명령에 일치시킬 여러 문자를 지정할 수 있나요?
  2. 일치하는 문자를 z로 변경하는 대신 삭제할 수 있나요?

미리 감사드립니다.

답변1

z로 변경되는 명령에 일치시킬 여러 문자를 지정할 수 있나요?

그래 넌 할수있어. 여러 문자를 대괄호로 묶으면 됩니다.

sed -i 's/[abc]/z/g' file.txt

이것은 모두를 대체합니다,, 그리고문자.
대체되지 않습니다알파벳~와 함께, 이는 다음으로 대체됩니다.쿨쿨.

일치하는 문자를 z로 변경하는 대신 삭제할 수 있나요?

이것은 매우 쉽습니다. 아무것도 넣지 않고 교체하면 됩니다.

sed -i 's/[abc]//g' file.txt

모두 삭제됩니다.,, 그리고문자.

find참고: 이 예는 & 가 있는 경우에도 작동합니다 xargs.

답변2

둘 다 예라고 답할 수 있습니다.

1: 소위 문자 클래스 [abcde]를 사용하면 그렇게 할 수 있습니다. 예:

echo abcabcabc | sed -e 's/[abc]/z/g'

세 개의 a,b,c를 모두 z로 대체합니다.

2: 빈 문자열로 대체하면 기본적으로 일치하는 모든 문자가 삭제됩니다. 예:

echo abcabcabc | sed -e 's/[ac]//g'

당신은 b 만 돌려받습니다.

관련 정보