2014-09-21 37 views
0

我有一个这样的文件:包含在同一行

1. Dé 33 2. iis ET 3. 56 RRE- 4. etc... 

,我想获得:

1. Dé 33 
2. iis ET 
3. 56 RRE- 
4. etc... 

我想用grep或sed的。我尝试了许多不成功的命令。我发现的最接近的命令是:

cat myfile | grep -o '[0-9]\{1,2\}\. ' 

导致:

1. 
2. 
3. 
4. 

所以,基本上我需要的是选择两个正则表达式之间的事情(比如我想要的一切之间的数字foollowed一个grep的功能由一个点)

任何想法? 非常感谢!

回答

3

随着sed

$ echo " 1. Dé 33 2. iis ET 3. 56 RRE- 4. etc..." | sed 's/[0-9]\+\./\n&/g' 

1. Dé 33 
2. iis ET 
3. 56 RRE- 
4. etc... 

解释:

在搜索模式
[0-9] \ +进行搜索数字,在1 ist一位数字必须存在,例如[0-9] *可以找到数字,但也可以是空字符串。
\。在这种情况下,点必须反斜杠。在正则表达式表示在替换模式
\ n会把换行符anychar


&将把相同的搜索图案,换句话说没有什么改变,除了\ n条件之前插入,在端
克将使替换所有找到的搜索模式

Idea在短期来讲是把换行符\ n字符如果您的grep支持数字与点

2

您可以使用此awk

awk '{for (i=1;i<=NF;i++) printf "%s%s",$i,(i%3==0?RS:FS)}' file 
1. De 33 
2. iis ET 
3. 56 RRE- 
4. etc.. 
0

结束前10那么你可以使用下面的grep命令。

$ grep -oP '.*?(?=\s\d+\.|$)' file 
1. Dé 33 
2. iis ET 
3. 56 RRE- 
4. etc... 

.*?(?=\s\d+\.|$)非贪婪的零个或多个字符,必须遵循[再次接着是一个或多个数字,进一步后面跟着一个点的空间] 由线锚$的端匹配。