2014-09-21 49 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+\.|$)非貪婪的零個或多個字符,必須遵循[再次接着是一個或多個數字,進一步後面跟着一個點的空間] 由線錨$的端匹配。

相關問題