2016-02-27 51 views
1

目前我的/ etc/hosts文件缺少短主機名(最後一列)是否有一種方法可以將文件中的FQDN值刪除.pdp。 wdf.ltd'並將主機名添加到最後一列。 爲了達到到這裏我的確寫了一個小的Python腳本,它寫了一個文件,但無法繼續獲得短主機添加使用python將短主機名添加到/ etc/hosts文件中

#!/usr/bin/env python 
import re,subprocess,os,socket 
a=subprocess.Popen('ifconfig -a', stdout=subprocess.PIPE, shell=True) 
_a, err= a.communicate() 
_ou=dict(re.findall(r'^(\S+).*?inet addr:(\S+)', _a, re.S | re.M)) 
_ou=_ou.values() 
_ou.remove('127.0.0.1') 

y=[] 
for i in _ou: 
    _z = '{0} ' .format (i), socket.getfqdn(i) 
    y.append(_z) 

_y=dict(y) 
_z=(' \n'.join('{0} \t {1}'.format(key, val)for (key,val) in _y.iteritems())) 

貓/ etc/hosts中

#IP-Address  Full-Qualified-Hostname  Short-Hostname 
10.68.80.28  dewdfgld00035.pdp.wdf.ltd  
10.68.80.45  lddbrdb.pdp.wdf.ltd    
10.68.80.46  ldcirdb.pdp.wdf.ltd    
10.72.176.28  dewdfgfd00035b.pdp.wdf.ltd 

輸出在/ etc所需/ hosts文件

##IP-Address  Full-Qualified-Hostname  Short-Hostname 
10.68.80.28  dewdfgld00035.pdp.wdf.ltd  dewdfgld00035 
10.68.80.45  lddbrdb.pdp.wdf.ltd   lddbrdb 
10.68.80.46  ldcirdb.pdp.wdf.ltd   ldcirbd 
10.72.176.28  dewdfgfd00035b.pdp.wdf.ltd  dewdfgfd00035b 
+1

SO不是一個代碼編寫服務,你必須發佈你已經寫過這個問題,並要求一個具體的問題。 –

+0

我沒有編寫代碼以達到第一個輸出,之後卡住了,現在會發布代碼 然後重定向了/ etc/hosts文件,但無法繼續執行 – Deepak

+0

@Deepak:將代碼添加到_question_ ,而不是評論。 – mhawke

回答

1

您可以使用下面的匹配(與g葉形和m個ultiline標誌):

(^[^\s#]+\s+([^.\n]+).*) 

,代之以如下:

\1\2 

RegEX DEMO

+0

**感謝噸**,它的作品像魅力.. – Deepak

+0

高興地幫助:) –

0

Okies我得到了它,但不得不調整了一下週圍。

#!/usr/bin/env python 

import re,subprocess,os,socket,shutil 

header= """#DO NOT EDIT MANUALLY ## File controlled by SaltStack# 
# IP-Address Full-Qualified-Hostname Short-Hostname 
# 
::1    localhost  loopback 
127.0.0.1  localhost 

""" 

a=subprocess.Popen('ifconfig -a', stdout=subprocess.PIPE, shell=True) 
_a, err= a.communicate() 
_ou=dict(re.findall(r'^(\S+).*?inet addr:(\S+)', _a, re.S | re.M)) 

_ou=_ou.values() 
_ou.remove('127.0.0.1') 

y=[] 
for i in _ou: 
    n = socket.getfqdn(i) +'\t'+ (socket.getfqdn(i).split("."))[0] 
    _z = '{0} ' .format (i), n 
    y.append(_z) 

_y=dict(y) 
_z=(' \n'.join('{0} \t {1}'.format(key, val)for (key,val) in _y.iteritems())) 
_z = header + _z 


def make_version_path(path, version): 
    if version == 0: 
    return path 
    else: 
    return path + "." + str(version) 


def rotate(path,version=0): 
    old_path = make_version_path(path, version) 
    if not os.path.exists(old_path): 
    raise IOError, "'%s' doesn't exist" % path 

    new_path = make_version_path(path, version + 1) 

    if os.path.exists(new_path): 
    rotate(path, version + 1) 
    shutil.move(old_path, new_path) 


_hosts_path = '/etc/hosts' 
shutil.copy (_hosts_path, _hosts_path+'_salt_bak') 
rotate(_hosts_path+'_salt_bak') 

f = open(_hosts_path, "w") 
f.write(_z); 
f.close() 

的變化是在代碼

y=[] 
    for i in _ou: 
     n = socket.getfqdn(i) +'\t'+ (socket.getfqdn(i).split("."))[0] 
     _z = '{0} ' .format (i), n 
     y.append(_z) 

    _y=dict(y) 

做,它的工作如預期。

相關問題