예제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 문자 클래스입니다. 괄호약이 문자 클래스의 괄호는 들어가려는 범위입니다.