我在替换文件中的文本时遇到问题,因为搜索短语包含单引号。
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.
我错过了什么?我还能用什么呢?
答案 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中)。