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



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

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

ls -l && echo '__SEPARATOR__'rntotal 36rndrwxr-xr-x 3 VMlinux2 VMlinux2 4096 Sep 27 09:26 x1b[0mx1b[01;34mDesktopx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mDocumentsx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mDownloadsx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mMusicx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mPicturesx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mPublicx1b[0mrndrwxr-xr-x 3 VMlinux2 VMlinux2 4096 Sep 26 13:11 x1b[01;34msnapx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mTemplatesx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mVideosx1b[0mrn__SEPARATOR__rnVMlinux2@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

它运行良好,我也尝试删除中断线和所有其他但相同的错误。

我做错了什么?或者我可以采取哪种方法来解决这个问题?

基本上,问题是"."符号与换行符不匹配。您需要做的是使用可能的换行符or这一点。一个(有点(完整的解决方案是这样的:

>>> regex = r"'__SEPARATOR__'((.|r|n|rn|nr)*)__SEPARATOR__"
>>> mo = re.search(regex, output)
>>> mo.group(1)
'rntotal 36rndrwxr-xr-x 3 VMlinux2 VMlinux2 4096 Sep 27 09:26 x1b[0mx1b[01;34mDesktopx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mDocumentsx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mDownloadsx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mMusicx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mPicturesx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mPublicx1b[0mrndrwxr-xr-x 3 VMlinux2 VMlinux2 4096 Sep 26 13:11 x1b[01;34msnapx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mTemplatesx1b[0mrndrwxr-xr-x 2 VMlinux2 VMlinux2 4096 Sep 26 13:10 x1b[01;34mVideosx1b[0mrn'

相关内容

  • 没有找到相关文章

最新更新