例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 文字クラスです。括弧薬この文字クラスの括弧は、入力したい範囲です。