Python with grep/sed/awk command



我是Python新手,如果我给出端口名称,我试图弄清楚如何从/etc/services获取端口号。

/etc/services包含以下值

DB2_test    60000/tcp
DB2_test_1  60001/tcp
DB2_test_2  60002/tcp
DB2_test_3  60003/tcp
DB2_test_4  60004/tcp
DB2_test_END    60005/tcp

命令

db2port=os.popen("db2 get dbm cfg | grep -i Service | awk '{{print $6}}'").read()
print(db2port)

返回DB2_test

以下命令不起作用。我只想看到 DB2_test 的值,即 60000:

getnum = "cat /etc/services | sed -n '/{db2port}s/p' | awk '{print $2}' | sed 's//tcp$//'"
print(getnum}

无需调用awk,sed等。一个纯粹的Python解决方案是:

for line in open("/etc/services").readlines():
        parts = line.split()
        if parts and parts[0] == 'DB2_test':
                port, protocol = parts[1].split('/')
                print(port)

假设变量services包含/etc/services中的文本。

port_map = {
    name: int(value.split('/')[0])
    for name, value in (
        line.split() for line in services.splitlines()
    )
}

现在,您有一个从服务名称到其端口的映射,例如,port_map["DB2_test"] == 60000

最新更新