Example1 work fine when I want to replace OLD_TEXT with NEW_TEXT ( its replace also all special characters as $@^%)(_+`:; etc ..)


  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 

on example2

I add the "[[:^alnum:]]" in the perl syntax in order to ignore TEXT that start with alpha numeric characters or end with alpha numric characters

but as all see it doesn't work why?

remark: alpha numric characters means numbers OR [a-z][A-Z]

Real Example

 #example2 on LINUX machine:

  more file



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



Example what I should get:

  more file


You want [^[:alnum:]], not [[:^alnum:]]. [:alnum:] is the POSIX character class being referred to. The brackets surrounding the brackets of that character class are the scope that you want to be within.

  • hi Chris - I change it but still its not replace the word : perl -pe 'next if /^#/; s/(\Q|[^[:alnum:]])$ENV{OLD_TEXT}(\E|[^[:alnum:]])/$1$ENV{NEW_TEXT}$2/g' file – yael Dec 16 '12 at 9:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy