替换文件 B/C 短语中的文本时遇到问题,其中包含单引号



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

文件名名称列表.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.

我错过了什么?我还可以使用什么?

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

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

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

相关内容

  • 没有找到相关文章

最新更新