2013-08-27 17 views
1

我有输出,看起来像这样:正则表达式停在一个特定的字符

16 1VirtualMachine1   [aljkas] some_data.blah 
17  Virtual Machine 1  [jklaj] some_more_data.blah 
23 Virtu al Machin e 1  [adwv] some_more_data.blah 


12  Virtual_Machine one  [awa] some_more_data.blah 
11 VirtualMa chineone  [kladfsa] some_more_data.blah 

而且我想只是空间之间以及多达[内容。

所以输出,将刚刚返回:

1VirtualMachine1 
Virtual Machine 1 
Virtu al Machin e 1 
Virtual_Machine one 
VirtualMa chineone 

我的正则表达式看起来像这样(但没有做什么,我认为它应该):

a_cmd | grep -o -E '[[:space:]]{2,}[a-zA-Z0-9\.,_()]+.+[[:space:]]{2,}'

而这只是返回所有的原始输出。我究竟做错了什么?

+4

它看起来像你的输入被分隔字符数。你为什么不直接从字符7-32中抓取,然后去掉空格,比如'cut -c7-32'? – kojiro

+0

由于名称可能非常长或很短,并影响'['在我的输出中的位置:( –

+0

请编辑问题,以便您的示例输入具有此特征。 – kojiro

回答

1
$ awk 'NF{ gsub(/(^[[:space:]]*[[:digit:]]+[[:space:]]+|[[:space:]]+\[.*)/,""); print}' file 
1VirtualMachine1 
Virtual Machine 1 
Virtu al Machin e 1 
Virtual_Machine one 
VirtualMa chineone 
2

这个grep的行会做的工作:

grep -oP '\d\s+\K[^[]*' 

你的榜样:

kent$ echo " 16 1VirtualMachine1   [aljkas] some_data.blah 
17 Virtual Machine 1  [jklaj] some_more_data.blah 
23 Virtu al Machin e 1  [adwv] some_more_data.blah 


12 Virtual_Machine one  [awa] some_more_data.blah 
11 VirtualMa chineone  [kladfsa] some_more_data.blah"|grep -oP '\d\s+\K[^[]*' 
1VirtualMachine1   
Virtual Machine 1   
Virtu al Machin e 1  
Virtual_Machine one  
VirtualMa chineone 
3

使用sed

sed 's/[0-9 ]* \(.*\)\[.*/\1/;/^$/d' your.file 
相关问题