sed を使用した引用符付き式の検索と置換

sed を使用した引用符付き式の検索と置換

欲しい行を交換する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)

関連情報