1

検索語句に単一引用符が含まれているため、ファイル内のテキストを置換できません。

ファイル名 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.

私は何が欠けていますか?他に何が使えますか?

4

1 に答える 1

2

実際、2 つの問題があります: パス内のスラッシュは、正規表現を区切るものとして Perl から認識されます。perl コマンドを二重引用符で囲みます (置換には別の区切り文字を使用します)。成功する:

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

正規表現を区切るために使用#し、外側の単一引用符を二重引用符に置き換えました。内部では単一引用符を使用できます (ほとんどの Unix シェルで)。

于 2012-12-05T22:12:02.040 に答える