linux + perl + 파일의 모든 WORD 및 특수 문자를 조건부로 바꿉니다.

linux + perl + 파일의 모든 WORD 및 특수 문자를 조건부로 바꿉니다.

예제1은 OLD_TEXT를 NEW_TEXT로 바꾸고 싶을 때 잘 작동합니다(모든 특수 문자도 $@^%로 바꿉니다)(_+`:; 등..).

  example1

  export OLD_TEXT='$$OLD_WORD$$'
  export NEW_TEXT='$$NEW_WORD$$'


  perl -pe 'next if /^#/; s/\Q$ENV{OLD_TEXT}\E/$1$ENV{NEW_TEXT}$2/g' file 

예제 2에서

영숫자 문자로 시작하거나 영숫자 문자로 끝나는 텍스트를 무시하기 위해 Perl 구문에 "[[:^alnum:]]"을 추가했습니다.

그런데 보시다시피 작동하지 않습니다. 왜 그럴까요?

참고: 영숫자는 숫자를 나타냅니다. OR [az][AZ]

실제 예

 #example2 on LINUX machine:


  more file

  ABC$$OLD_WORD$$ABC
  $$OLD_WORD$$

.

   perl -pe 'next if /^#/; s/(\Q|[[:^alnum:]])$ENV{OLD_TEXT}(\E|[[:^alnum:]])/$1$ENV{NEW_TEXT}$2/g' file

     $$NEW_WORD$$ABC$$$NEW_WORD$$$$$NEW_WORD$$OLD_$$NEW_WORD$$WORD$$$NEW_WORD$$$$$NEW_WORD$$ABC

.

내가 받아야 할 것의 예:

  more file


  ABC$$OLD_WORD$$ABC
  $$NEW_WORD$$

답변1

당신 은 원해요 [^[:alnum:]], 아니 [[:^alnum:]]. [:alnum:]참조되는 POSIX 문자 클래스입니다. 괄호이 문자 클래스의 괄호는 들어가려는 범위입니다.

관련 정보