去掉主机字符串末尾的句点

10 投票
3 回答
13730 浏览
提问于 2025-04-17 16:18

我在想办法去掉主机名最后的那个句号,但遇到了一些困难...

现在的输出结果是:

  • domain.com.
  • suddomain.com.
  • domain.com.
  • subdomain.subdomain.com.
  • subdomain.com.

我想要的输出结果是:

  • domain.com
  • subdomain.com
  • domain.com
  • subdomain.subdomain.com

尝试1:

print string[:-1]  #it works on some lines but not all

尝试2:

 str = string.split('.')
 subd = '.'.join(str[0:-1])
 print subd    # does not work at all 

代码:

global DOMAINS

if len(DOMAINS) >= 1:
  for domain in DOMAINS:
    cmd = "dig @adonis.dc1.domain.com axfr %s |grep NS |awk '{print $1}'|sort -u |grep -v '^%s.$'" % (domain,domain)
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,   shell=True)
    string = p.stdout.read()
    string = string.strip().replace(' ','')
    if string:
      print string

3 个回答

-3

我放弃了,直接用sed来处理了……

cmd = "dig @adonis.dc1.domain.com axfr %s |grep NS |awk '{print $1}' |sort -u |grep -v '^%s.$'|sed -e 's/.$//'"
1

@isedev 给出的答案在这个特定的情况下有点不完整。rstrip('.') 是用来去掉字符串末尾的句号,但通过 subprocess 返回的字符串后面会有一个换行符(0x0A),这个换行符会导致 rstrip('.') 无法正常工作。

这可能就是为什么提问者放弃了。

看看下面的 python3 代码:

print ('domain.'.rstrip('.'))

运行效果如预期。然而,添加一个换行符来模拟命令行输出:

print ('domain.\n'.rstrip('.'))

会打印出 domain.

解决这个问题的一种方法是在调用 rstrip() 之前先使用 strip()

print ('domain.\n'.strip().rstrip('.'))

这样打印出来的是:domain

记得,记得要处理好你的命令行输出哦 :)

25

你可以这样做:

hostname.rstrip('.')

这里的hostname是一个字符串,里面包含了域名。

>>> 'domain.com'.rstrip('.')
'domain.com'
>>> 'domain.com.'.rstrip('.')
'domain.com'

撰写回答