2016-10-25 7 views
-1

私は次の形式のファイル 'abc.txt'を持っています。検索と置換 - 一致パターン付きのPython

+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は、ユーザー3など

これは私がこれまでに書かれたものです:

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], "????") 

私はこの谷線を実現することができると思ういけません。置き換えてください。私はre.subを使用してこれを行う必要がありますか?どのようにre.subを使用してそれを行うには?私はあなたがそれらを一緒にグループ化することができると信じていますか?

誰かが助けてくれますか?私は、このトラフline.replaceを達成することができると思ういけない

感謝

+1

あなたは*考えていませんか?なぜあなたは知りませんか? Pythonインタプリタはこれに関する究極の権限です。ここにコードを投稿する前にコードを実行してください。 – Prune

答えて

0

。私はre.subを使用してこれを行う必要がありますか?

この部分は間違っています。 user1のフォーマットを変更するための

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

:あなたはとしてstr.replace()を使用してそれを達成することができます。 listという形で複数のユーザーがいる場合ユーザーのリストを繰り返し実行します。

re.sub()は、たとえばuser<some_num>のような形式に基づいてコンテンツを置き換える場合に便利でした。しかし、シングルユーザーの場合はstr.replace()が良い選択です

+0

ありがとうございました。ファイルの各行の空白が修正されていないので、re.search(正規表現)を使用して照合する必要があるかもしれません。/bin/su - user1などの間に1つ以上存在するかもしれません。私はそれを試してみます。この質問にお答えいただきありがとうございます – bob

関連する問題