私は複数のPythonファイルを変更しており、各変数宣言の前に "self."を追加する必要があります。これが私がやろうとしていることの例です。
したがって:
class testClass(parentClass):
def __init__(self):
parentClass.__init__(self)
flag1 = 0
flag2 = 1
array = (0,
1,
2)
これに関して:
class testClass(parentClass):
def __init__(self):
parentClass.__init__(self)
self.flag1 = 0
self.flag2 = 1
self.array = (0,
1,
2)
私はそれに精通していますsed
が、複数の文字列/数字と一致しない行の前に行を追加する方法がわかりません。次のパターンと一致しない場合は、前にor行または^'def'
or^'import'
行^'parentClass'
を追加してください^[0-9]
。どんな指示でもとても役に立ちます。ありがとうございます。
答え1
__init__
この小さな Perl 行はメソッド置換を制限しようとします。
perl -pe '
if (/^\s* def \s+ __init__/x) {
$start = 1;
}
elsif ($start) {
s{ (\w+) (?=\s+=) }{self.$1}x;
/^\s* (class | def) \b/x and $start = 0;
}
' file.py
または awk の同じ論理
awk '
$1 == "def" && $2 ~ /^__init__/ {start = 1; print; next}
start && /^[[:blank:]]+[[:alnum:]_]+)[[:blank:]]*=/ {
$0 = gensub(/[[:alnum:]_]+/, "self.\\0", 1)
}
{print}
$1 == "def" || $1 == "class" {start = 0}
' file.py
答え2
変数プレフィックスを適用したい行が常に=
ユーザーが指定したシンボル形式を持つと仮定すると、このsed
方法は機能します。
$ cat myfile.py
class testClass(parentClass):
def __init__(self):
parentClass.__init__(self)
flag1 = 0
flag2 = 1
array = (0,
1,
2)
$ sed -e 's/\(^\s\+\)\(\w\+\)\(\s*=\)/\1self\.\2\3/g' myfile.py
class testClass(parentClass):
def __init__(self):
parentClass.__init__(self)
self.flag1 = 0
self.flag2 = 1
self.array = (0,
1,
2)
この恐ろしい正規表現は英数字文字列(スペースを無視)で始まり、等号の前にスペースがある行を探しています。self.
変数の前に追加されます。