欲しい行を交換するPythonコード、ここ引用符が含まれています。
元のファイルの行は次のとおりです。
ScalarLogger("results.dat" ,('t',) + exp_data)
欲しいそれに変える
ScalarLogger("results_j" + str(sys.argv[1]) + "_h" + str(sys.argv[2]) + ".dat" , ('t',) + exp_data)
sed
だから私のアプローチは、次のコマンドを使用することです。
sed -i 'e/results.dat/results_j" + str(sys.argv[1]) + "_h" + str(sys.argv[2]) + ".dat/g' run.py
ただし、次のメッセージが表示されます。間違い:
sh: 1: /results.dat/results_j + str(sys.argv[1]) + _h + str(sys.argv[2]) + .dat/g: not found
/
役割を変更しましたが、まだ機能していません。
答え1
あなたのsed
表情は言うe/.../.../g
よりも言うようですs/.../.../g
。
e
コマンドsed
は、引数(文字/
とlastを含むパターン/g
)をシェルコマンドにインポートし、データをそのコマンドの出力に置き換える(コマンドの置き換えと少し似ている)標準ユーティリティのGNU拡張です。
幸いなことに、そのコマンドが見つからず、有効で破壊的なシェルコマンドではありません。
答え2
注文する
awk -F "." '{print $1"_j""\""" + str(sys.argv[1]) + ""\"""_h""\""" + str(sys.argv[2]) +""\"""."$2}' filename
sed -e 's/results/&_j" + str(sys.argv[1]) + "_h" + str(sys.argv[2]) + /g' -e 's/\.dat/"&/g' filename
Python
#!/usr/bin/python
m=open('filename','r')
for i in m:
k=i.split(".")
print k[0]+'_j" + str(sys.argv[1])+'+'"_h" + str(sys.argv[2]) + ".'+k[1]
出力
ScalarLogger("results_j" + str(sys.argv[1]) + "_h" + str(sys.argv[2]) +".dat" ,('t',) + exp_data)