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

おすすめ記事