从ls -l命令输出中提取模式
我想从 ls -1hl
命令中提取一些信息。
我需要在不同的远程服务器上运行这个命令,但每台服务器的输出格式都不一样,因为有的使用的是Solaris系统,有的是GNU Linux系统。
下面是我想要格式化的 ls -1hl
命令的一部分:-
ssh user@server 'ls -1hl /path/to/directory'
ls命令:-
-rw-r----- 1 root groupA 0 2014-08-04 10:42 a.log
-rw------- 1 root groupA 48132720 Aug 1 23:45 core
-rwxr-xr-x 1 root groupA 208 Mar 13 17:18 restart.sh
lrwxrwxrwx 1 root groupA 49 2014-06-06 09:32 MerSem -> ../combined_ABC/scripts
drwxrwxrwx 3 root groupA 1.0K Apr 22 16:12 logs
我想从上面的内容中提取以下信息:-
对于第一行
permission = -rw-r-----
links = 1
owner = rooot
group = groupA
size = 0
date = 2014-08-04 10:42
File/Directory Name = a.log
我的代码:-
Final_list = []
result = ls_command.split('\n')
for line in result:
coldata = []
a = re.search(r"^(.+?)\s{1,3}.*$",line)
b = re.search(r"^.+?\s{1,3}(\d{1,5}).*$",line)
c = re.search(r"^.+?\s{1,3}\d{1,5}(.+?)\s{1,3}.*$",line)
d = re.search(r"^.+?\s{1,3}\d{1,5}.+?\s(.+?)\s{1,3}.*$",line)
e = re.search(r"^.+?\s{1,3}\d{1,5}.+?\s.+?\s{1,3}([0-9.A-Za-z]+?)\s{1,3}.*$",line)
f = re.search(r"^.+?\s{1,3}\d{1,5}.+?\s.+?\s{1,3}[0-9.A-Za-z]+?\s{1,3}(.+?)\s{1,3}.*$",line)
g = re.search(r"^.*\s{1,3}(.+)$",line)
if a:
permissions = a.group(1)
if b:
links = b.group(1)
if c:
owner = c.group(1)
if d:
group = d.group(1)
if e:
size = e.group(1)
if f:
date = f.group(1)
if g:
filename = g.group(1)
if a and b and c and d and e and f and g:
coldata.append(permissions)
coldata.append(links)
coldata.append(owner)
coldata.append(group)
coldata.append(size)
coldata.append(date)
coldata.append(filename)
Final_list.append(coldata)
但是这段代码在我得到的日期格式下无法正常工作。
Print Final_list
[['-rw-r-----','1','root','groupA','0','2014-08-04','a.log'],['-rw-------','1','root','groupA','48132720','Aug','core'],['-rwxr-xr-x','1','root','groupA','208','Mar','restart.sh'],['lrwxrwxrwx','1','root','groupA','49','2014-06-06','../combined_ABC/scripts'],['drwxrwxrwx','3','root','groupA','1.0K','Apr','logs']]
期望的输出:-
[['-rw-r-----','1','root','groupA','0','2014-08-04 10:42 ','a.log'],['-rw-------','1','root','groupA','48132720','Aug 1 23:45','core'],['-rwxr-xr-x','1','root','groupA','208','Mar 13 17:18','restart.sh'],['lrwxrwxrwx','1','root','groupA','49','2014-06-06 09:32','MerSem -> ../combined_ABC/scripts'],['drwxrwxrwx','3','root','groupA','1.0K','Apr 22 16:12','logs']]
1 个回答
-1
这段代码的意思是……
首先,它定义了一个变量,这个变量可以用来存储一些信息。接下来,它可能会进行一些操作,比如计算、比较或者是改变这个变量的值。
然后,代码可能会有一些条件判断,也就是根据不同的情况执行不同的操作。如果条件满足,就执行某个代码块;如果不满足,就执行另一个代码块。
最后,代码可能会输出一些结果,告诉我们程序运行的结果是什么。
总的来说,这段代码就是在做一些基本的计算和判断,帮助我们处理数据或者完成某个任务。
s="""
-rw-r----- 1 root groupA 0 2014-08-04 10:42 a.log
-rw------- 1 root groupA 48132720 Aug 1 23:45 core
-rwxr-xr-x 1 root groupA 208 Mar 13 17:18 restart.sh
lrwxrwxrwx 1 root groupA 49 2014-06-06 09:32 MerSem -> ../combined_ABC/scripts
drwxrwxrwx 3 root groupA 1.0K Apr 22 16:12 logs
"""
line = s.lstrip().split("\n")[0].split() # split on newline and split the first line
permission = line[0]
links = line[1]
owner = line[2]
group = line[3]
size = line[4]
date = line[5]
Name = line[-1]
print permission,links,owner,group,size,date,Name
-rw-r----- 1 root groupA 0 2014-08-04 a.log