python3でファイル内の複数の文字列を置き換える

python3でファイル内の複数の文字列を置き換える

名前とともに変更する必要memberUidがある以下のいくつかの項目を含むテストファイルがあります。nisNetgroupTriple

$ cat testfile2
memberUid: tony
memberUid: jacob
memberUid: zenny
memberUid: helori
memberUid: honies
memberUid: hunter

しかし、memberUidunix likeを使用して変更することができ、likeを使用して再変更することはできますが、どちらもプロセスをよりエレガントに実行できますが、まだ理解していません。nisNetgroupTriplesed%s/memberUid/nisNetgroupTriple/gawkawk '{print $1, "(-,"$2",)"}' testfile2

希望の出力:

nisNetgroupTriple: (-,tony,)
nisNetgroupTriple: (-,jacob,)

答え1

この試み:

sed -r 's/^memberUid: (.*)/nisNetgroupTriple: (-,\1,)/' testfile2 
nisNetgroupTriple: (-,tony,)
nisNetgroupTriple: (-,jacob,)
nisNetgroupTriple: (-,zenny,)
nisNetgroupTriple: (-,helori,)
nisNetgroupTriple: (-,honies,)
nisNetgroupTriple: (-,hunter,)

sedを検索、置換、およびキャプチャグループで使用します(.*)。代替文字列は目的の書式を作成し、\1角かっこ内にキャプチャされた内容を埋めます。

答え2

Python3を使用して回答を探している間に、Python正規表現を使用した回答は次のとおりです。

import re
f = open(testfile2).read()
re.sub(r'(memberUid)(\:\s)(\w+)',r'nisNetgroupTriple\2(-,\3,)',f)

説明する:

  • rere.sub次のように提供された文字列のパターンを別のパターンに置き換えるPythonの正規表現モジュールによって提供されるメソッドです。
    • re.sub(r'original-pattern', r'replacement-pattern', inputString)
  • パターンで使用される括弧は、キャプチャのグループに使用されます。オリジナルパターン。たとえば、私たちの場合、memberUid3:\sつのグループをキャプチャしました\w+。その後、代替パターン(など)でこれらのグループを参照でき\1ます\2

答え3

各入力ラインの最初の部分は常に置き換えられるため、これはsed重複します。あなたに必要なもの

awk '{print "nisNetgroupTriple: (-,"$2",)"}'

関連情報