无法替换文件中的文本b / c短语包含单引号

时间:2012-12-05 22:03:26

标签: perl bash

我在替换文件中的文本时遇到问题,因为搜索短语包含单引号。

FILENAME namelist.pinterp

&io
    path_to_input  = '.'
    input_name     = 'wrfout_d01_2006-09*00'
    path_to_output = '.'
  /

我正在使用bash脚本。我想要改变的是:

path_to_output = '.'

为:

path_to_output = '/myWorkDir/ALL_NEW/post_processed_files'

我尝试过使用perl但是我遇到了错误。

perl -pi -e 's/path_to_output = '.'/ path_to_output =   '/myWorkDir/ALL_NEW/post_processed_files'g;' namelist.pinterp

ERROR
./myPinterp.bash: line 13: path_to_output = '.': command not found
Bareword found where operator expected at -e line 1, near "s/path_to_output = ./ path_to_output = /myWorkDir"
syntax error at -e line 1, near "s/path_to_output = ./ path_to_output = /myWorkDir"
Execution of -e aborted due to compilation errors.

我错过了什么?我还能用什么呢?

1 个答案:

答案 0 :(得分:2)

实际上你有两个问题:路径中的正斜杠将被Perl视为分隔正则表达式。用双引号括起perl命令(并使用不同的分隔符进行替换);做到:

perl -pi -e "s#path_to_output = '.'#path_to_output = '/myWorkDir/ALL_NEW/post_processed_files#g;" namelist.pinterp

我使用#来分隔正则表达式,并用双引号替换外部单引号,其中单引号是可接受的(在大多数Unix shell中)。