搜索并用匹配模式替换python

2024-04-30 01:26:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个档案'abc.txt文件'格式如下。你知道吗

+test1_app1 +o_test = /bin/su - user1  
+test1_app1 +ae_test1d = /bin/su - user2   
+test2_app +e_hd = /bin/su -  user1  
+crd_app +er_sd = /bin/su - user2  
+rod_app +eo_tsd = /bin/su - user1  
+rod_app +eo_tsd = /bin/su - user3  

我喜欢搜索特定的用户,然后用不同的格式写入同一个文件

对于user1,它应该更改相同的文件abc.txt文件在下面。请注意,我正在阅读passwd的用户列表。你知道吗

+test1_app1 +o_test = (user1) ALL  
+test1_app1 +ae_test1d = /bin/su - user2   
+test2_app +e_hd = (user1) ALL  
+crd_app +er_sd = /bin/su - user2  
+rod_app +eo_tsd = (user1) ALL  
+rod_app +eo_tsd = /bin/su - user3  

passwd文件包含所有用户,如user1、user2、user3等

这是我迄今为止写的:

import fileinput   
s=open('/etc/passwd','r')  
for i in s:  
    if 'user' in i:  
        for line in fileinput.input('/tmp/abc.txt', inplace = 1):  
            print line.replace(i.split(':')[0], "????")

我不认为我能做到这一点线路.更换. 我可能需要用回复sub?如何使用回复sub?我相信你可以把它们组合在一起“\1”什么的?你知道吗

有人能帮忙吗?你知道吗

非常感谢


Tags: 文件用户txtappbineosuabc
1条回答
网友
1楼 · 发布于 2024-04-30 01:26:18

I dont think I can achieve this trough line.replace. I may need to do this using re.sub?

这部分你错了。您可以使用str.replace()实现它:

 line = line.replace('/bin/su - user1', '(user1) ALL') 

用于更改user1的格式。如果您有多个list形式的用户。遍历用户列表并执行此操作。你知道吗

re.sub()如果您想替换基于某些格式的内容,例如user<some_num>,那么re.sub()会很有用。但是对于单用户,str.replace()是更好的选择

相关问题 更多 >