名前とともに変更する必要memberUid
がある以下のいくつかの項目を含むテストファイルがあります。nisNetgroupTriple
$ cat testfile2
memberUid: tony
memberUid: jacob
memberUid: zenny
memberUid: helori
memberUid: honies
memberUid: hunter
しかし、memberUid
unix likeを使用して変更することができ、likeを使用して再変更することはできますが、どちらもプロセスをよりエレガントに実行できますが、まだ理解していません。nisNetgroupTriple
sed
%s/memberUid/nisNetgroupTriple/g
awk
awk '{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)
説明する:
re
re.sub
次のように提供された文字列のパターンを別のパターンに置き換えるPythonの正規表現モジュールによって提供されるメソッドです。re.sub(r'original-pattern', r'replacement-pattern', inputString)
- パターンで使用される括弧は、キャプチャのグループに使用されます。オリジナルパターン。たとえば、私たちの場合、
memberUid
3:\s
つのグループをキャプチャしました\w+
。その後、代替パターン(など)でこれらのグループを参照でき\1
ます\2
。
答え3
各入力ラインの最初の部分は常に置き換えられるため、これはsed
重複します。あなたに必要なもの
awk '{print "nisNetgroupTriple: (-,"$2",)"}'