我有测试文件,其中有一些如下所示的条目,我需要更改memberUid
为nisNetgroupTriple
与名称一起
$ cat testfile2
memberUid: tony
memberUid: jacob
memberUid: zenny
memberUid: helori
memberUid: honies
memberUid: hunter
但是,我可以使用 unix like更改memberUid
to ,并使用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
是Python的正则表达式模块提供的re.sub
方法,它通过以下方式用提供的字符串中的另一个模式替换一个模式:re.sub(r'original-pattern', r'replacement-pattern', inputString)
- 模式中使用的括号用于捕获中的组原始图案。例如,在我们的例子中,我们捕获了 3 个组:
memberUid
、:\s
和\w+
。然后,我们可以在替换模式中引用这些组,例如\1
,\2
等等。
答案3
由于每个输入行的第一部分总是会被替换,因此sed
是多余的。所有你需要的是
awk '{print "nisNetgroupTriple: (-,"$2",)"}'