문자열이 일치하면 이 sed가 실행되지 않나요?

문자열이 일치하면 이 sed가 실행되지 않나요?

sed레이블 안의 숫자를 제거하는 명령 은 다음과 같습니다 .

sed 's/\(<[^0-9>]*\)[0-9]*\([^0-9]*>\)/\1\2/g'

그런데 특정 문자열을 제외하는 방법을 아는 사람이 있나요?

이제 다음과 같이 표시됩니다. 다음을 입력하세요.

<user1></user1>
<password2></password2>

그리고 출력:

<user></user>
<password></password>

그러나 비밀번호 2와 같은 특정 문자열을 제외할 수 있기를 원하면 출력은 다음과 같습니다.

<user></user>
<password2></password2>

답변1

파일을 전처리하여 화이트리스트에 추가하려는 문자열에 특수 문자를 삽입하여 문자열이 교체되는 것을 방지할 수 있습니다.

당신이 바꿀 것처럼 :

<user1></user1>
<password2></password2>

도착하다

<user1></user1>
<|password2><|/password2>

먼저 s/\(<[^|0-9>]*\)[0-9]*\([^0-9]*>\)/\1\2/g교체를 위해. 가능 하다면 |입력에 이미 존재하는 경우 _-> _u, |-> 와 같은 구성표를 사용하여 이스케이프할 수 있으며 _p그 후에 실행 취소할 수 있습니다.

sed '
  s/_/_u/g;s/|/_p/g
  s:<\(/\{0,1\}password2>\):<|\1:g
  s:<\(/\{0,1\}othertag>\):<|\1:g
  s/\(<[^|0-9>]*\)[0-9]*\([^0-9]*>\)/\1\2/g
  s/|//g;s/_p/|/g;s/_u/_/g'

관련 정보