替换python3中文件中的多个字符串

替换python3中文件中的多个字符串

我有测试文件,其中有一些如下所示的条目,我需要更改memberUidnisNetgroupTriple与名称一起

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

但是,我可以使用 unix like更改memberUidto ,并使用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)

解释:

  • 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",)"}'

相关内容