从主机字符串中去掉最后一个句点

10
我在想如何从主机名中删除最后一个句号。现有的输出如下:
  • domain.com.
  • suddomain.com.
  • domain.com.
  • subdomain.subdomain.com.
  • subdomain.com.
期望的输出为:
  • domain.com
  • subdomain.com
  • domain.com
  • subdomain.subdomain.com
尝试一:
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

尝试1在您的所有测试用例中都有效,您能否提供一个它失败的示例? - igon
打印字符串[:-1] ... 除了最后一个子域外,都会失败。 - Simply Seth
3个回答

25

你可以这样做:

hostname.rstrip('.')

其中,hostname 是包含域名的字符串。

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

1
@isedev 给出的答案在这个特定的用例中有些不完整。 rstrip('。')将从字符串中删除尾随句点,但是由 subprocess 返回的字符串将在句点后跟随换行符(0x0A),这会导致 rstrip('。')失败。
这很可能是OP放弃的原因。
考虑以下python3代码:
print ('domain.'.rstrip('.'))

按预期工作。但是,添加换行符来模仿Shell输出:

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

打印 domain.

管理这个的一种方法是在 rstrip() 调用之前简单地插入一个 strip()

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

这段代码会输出:domain

无论何时,都要清除你的 shell 输出 :)


这就是我在这里做的。另外,你想要将所有的域名/主机名都转换为小写,以避免与某些服务器出现问题。所以我的第一个整理链是:domain = domain.lower().strip().rstrip(".") - Roland

-3

我放弃了,改用sed代替...

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

6
@isedev给了你你正在寻找的答案(事实上,最简单的答案)。那应该是被接受的答案。 - Oscar Mederos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接