다음을 포함하는 파일이 있습니다.
<class>
these are special @ $ characters / < > & " '
</class>
. 사이에 있는 특수 문자를 모두 제거하고 싶습니다 <class> </class>
.
이 명령을 시도했습니다.
sed "s/[^a-zA-Z0-9(<.class>)(<\/class>)/ /g" file.txt
위의 명령에서는 문자, 숫자, 레이블을 유지하려고 했으며 그 외 모든 항목은 제거되어야 합니다.
그러나 그것은 나에게 원하는 결과를 제공하지 않습니다.
답변1
블록이 하나만 있고 class
각 레이블이 별도의 줄에 있다고 가정하면 GNU awk에서는 다음과 같이 작동합니다.
awk '/<\/class>/{p=0};p{gsub(/[^A-Za-z0-9]/," ")};/<class>/{p=1};1' file.txt
답변2
아래 명령으로 테스트를 완료하고 아래 명령을 사용하여 제대로 작동했습니다 . 사이에 있는 모든 특수 문자를 sed
제거했습니다.[<>&$@/'"]
<class> and </class>
입력.txt
<class>
these are special @ $ characters / < > & " '
</class>
주문하다
sed -n '/<class>/,/<\/class>/p' input.txt | sed '/^[a-z]/s/[<>&$@/]//g' | sed "s/'//g" | sed 's/"//g'
산출
<class>
these are special characters
</class>