我在替换文件中的文本时遇到问题,因为搜索短语包含单引号。
文件名名称列表.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 中)。