2016-11-08 38 views
2

私はいくつかの変数値を変更するためにbashスクリプトでsedを使用しています。これらの変数は、異なる種類の混合物であり、また一部の特殊文字が含まれていますsedがファイルを見つけることができません

sed -i -e "s/NPROC=[^,]*,/NPROC=$NPROC/" \ 
     -e "s/NFRPOS=[^,]*,/NFRPOS=$OUTPUTFREQ/" \ 
     -e "s/NFRHIS=[^,]*,/NFRHIS=$OUTPUTFREQ/" \ 
     -e "s/COSP_OUTPUT_FREQUENCY=[^,]*,/COSP_OUTPUT_FREQUENCY=$OUTPUTFREQ/" \ 
     -e "s/TSTEP=[^,]*,/TSTEP=$TSTEP/" \ 
     -e "s/NCEXTR=[^,]*,/NCEXTR=$NCEXTR/" \ 
     -e "s/NVXTR2=[^,]*,/NVXTR2=$NVXTR2/" \ 
     -e "s/NVEXTR=[^,]*,/NVEXTR=$NVEXTR/" \ 
     -e "s/COSP_NLEVELS=[^,]*,/COSP_NLEVELS=$NLEV/" \ 
     -e "s/NVEXTRAGB=[^,]*,/$NVEXTRAGB/" \ 
     -e "s/NVEXTR2GB=[^,]*,/$NVEXTR2GB/" \ 
     -e "s/NFPLEV=[^,]*,/NFPLEV=$NFPLEV/" \ 
     -e "s/CNMEXP=[^,]*,/CNMEXP=\"${EXPID}\"/" \ 
     -e "s/LFPOS=[^,]*,/NFPOS=2/" \ 
     -e "s/NLAT=[^,]*,/NLAT=$NLAT/" \ 
     -e "s/NLON=[^,]*,/NLON=$NLON/" \ 
     $NAMELIST 


+ sed -i -e 's/NPROC=[^,]*,/NPROC=10/' ' ' 
sed: can't read : No such file or directory 

はしかし、私は、ファイル$ NAMELISTが見つからないというエラーを取得しておきます。ファイルは同じディレクトリに存在し、名前にエラーはありません。フルパスを追加しても役に立ちません。だから私はこのsedコマンドで何が間違っているのだろうかと思います。

+0

オリジナルのエラー「$ NAMELISTが見つかりません」はどこですか?新しいエラーは簡単に把握できます。また、 '/ path/to/namelist:Permission denied'というエラーが発生している可能性があります。 – alvits

+0

エラーは、行継続の後にスペースを追加したことです。 – Shejo284

答えて

3

最初のバックスラッシュの後にスペースがあります。コマンドを続行するために改行をエスケープするのではなく、スペースをエスケープしているので、編集するファイルの名前が単一のスペースであると考えます。

バックスラッシュがすべての行の最後の文字であることを確認してください。

+0

それが問題でした。ありがとう:-)空きスペースに気付きにくいです。 – Shejo284

+1

行から末尾のスペースを自動的に削除するテキストエディタを使用するか、スペースなどの不可視文字を少なくとも表示します。私は個人的には、この種の問題のために、とにかく継続行が好きではない。 – user1934428

+0

良い点。私はターミナルモードでemacsを使用していたので、問題は見えませんでした。また、この場合、スペースがこのようなエラーを引き起こすことを知る必要があります。このような良質なキャラクターがこのような問題を引き起こすことは明らかではありません。 – Shejo284

0

何らかの理由で、NAMELIST変数が展開されていません。 Sedは "/the/path/to/namelist.txt"の代わりに "$ NAMELIST"という名前のファイルを探しています...

NAMELIST変数を設定しているロジックをチェックします。

+0

フルパスをファイルに追加して名前を明示的に指定しても役立たない。私はsedに新しいので、私はコマンドで何かを逃したと思う。 – Shejo284

0

もう1つの説明は、NAMELISTに文字通り「can not read」というフレーズが含まれていることです。ウィットに:

$ NAMELIST="can't read " 
$ sed -e 1d "$NAMELIST" 
sed: can't read : No such file or directory 

どのように設定しますNAMELIST

+0

Hehe ...私はBashでコーディングするのが悪いわけではありません。 Namelist = namelist.t255。 – Shejo284

関連する問題