如何从交互式shell中提取命令输出?

时间:2019-10-11 23:47:03

标签: python regex

我需要提取一个字符串命令输出,我想使用一个正则表达式从整个输出中获取一个字符串,特别是两个分隔符之间的中间字符串:

这是一个shell命令输出,我在字符串__SEPARATOR__中打印,第一个带有简单的引号,最后一个没有引号:

ls -l && echo '__SEPARATOR__'\r\ntotal 36\r\ndrwxr-xr-x 3 VMlinux2 VMlinux2 4096 Sep 27 09:26 \x1b[0m\x1b[01;34mDesktop\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mDocuments\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mDownloads\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mMusic\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mPictures\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mPublic\x1b[0m\r\ndrwxr-xr-x 3 VMlinux2 VMlinux2 4096 Sep 26 13:11 \x1b[01;34msnap\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mTemplates\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mVideos\x1b[0m\r\n__SEPARATOR__\r\nVMlinux2@ubuntu:~$ 

我的正则表达式:

'__SEPARATOR__'(.*)__SEPARATOR__

所以我试图获取这些分隔符之间的中间字符串

regex = r"'__SEPARATOR__'(.*)__SEPARATOR__"
text = re.search(regex, output).group(1)
print(text)

但是我得到一个错误:

AttributeError: 'NoneType' object has no attribute 'group'

我尝试使用以下简单文本:

I'm want to get the '__SEPARATOR__' middle text __SEPARATOR__ from this text

而且效果很好,我也尝试删除了换行符以及除相同错误外的所有其他内容。

我做错了什么?或该问题我可以采取哪种方法?

1 个答案:

答案 0 :(得分:-1)

基本上,问题在于“。”符号与换行符不匹配。您需要做的是or,并附上可能的换行符。一个(某种程度上)完整的解决方案将是这样的:

>>> regex = r"'__SEPARATOR__'((.|\r|\n|\r\n|\n\r)*)__SEPARATOR__"
>>> mo = re.search(regex, output)
>>> mo.group(1)
'\r\ntotal 36\r\ndrwxr-xr-x 3 VMlinux2 VMlinux2 4096 Sep 27 09:26 \x1b[0m\x1b[01;34mDesktop\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mDocuments\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mDownloads\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mMusic\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mPictures\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mPublic\x1b[0m\r\ndrwxr-xr-x 3 VMlinux2 VMlinux2 4096 Sep 26 13:11 \x1b[01;34msnap\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mTemplates\x1b[0m\r\ndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 \x1b[01;34mVideos\x1b[0m\r\n'