2010-07-26 34 views
3

我有一個如下所示的文件。正則表達式在vim中查找和替換:將.0添加到數字

1 1 0 # 1 
6 1 0 # 2 
8 1 0 # 3 
10 1 0 # 4 
12 1 0 # 6 

如何將.0添加到除#號後面的數字之外的所有數字。我想這應該不是太難的事情用正則表達式,但我的正則表達式的知識太生疏..

+1

什麼語言?正則表達式語法在某些語言中不同。 – BoltClock 2010-07-26 07:31:22

+0

vim(搜索並替換) – Nils 2010-07-26 07:33:18

回答

7

如果#後,你的號碼沒有經過他們的空間,你可以使用:

:g/\([0-9]\+\) /s//\1.0 /g 

採用()創建,你可以稱之爲\D在替換文本組,其中D是搜索字符串內組的位置。這會給你:

1.0 1.0 0.0 # 1 
6.0 1.0 0.0 # 2 
8.0 1.0 0.0 # 3 
10.0 1.0 0.0 # 4 
12.0 1.0 0.0 # 6 

如果他們有照顧他們的空間(這你似乎有),你會得到:

在這種情況下
1.0 1.0 0.0 # 1.0 
6.0 1.0 0.0 # 2.0 
8.0 1.0 0.0 # 3.0 
10.0 1.0 0.0 # 4.0 
12.0 1.0 0.0 # 6.0 

你可以再做:

:g/\.0\( *\)$/s//\1/g 

要修復它。

+0

+1,因爲這是一個更好的正則表達式,然後我的。 – Anders 2010-07-26 07:57:04

+0

s/\\([0-9] \ + \\)/\1.0/g更短 – Nils 2010-07-26 08:01:12

+0

但thx爲答案:) – Nils 2010-07-26 08:01:29

1

假設它是良好的,使用sed這應該工作。

編輯:只是爲了澄清,vim沒有作爲標籤附加到這個問題,當我看到它。

sed 's/\([0-9]\+\) \+\([0-9]\+\) \+\([0-9]\+\)/\1.0 \2.0 \3.0/' file 
+0

爲什麼反斜槓在+和()之前? – Nils 2010-07-26 07:44:34

+0

另外我不明白\ 1.0 \ 2.0和3.0之後/你能解釋一下嗎? – Nils 2010-07-26 07:45:26

+0

它需要被轉義。 \ 1 \ 2 \ 3是分組。我只是簡單地將這些組中的每一個加上。 – Anders 2010-07-26 07:49:08

8

隨着VIM:

:%s/\v(#.*)@<!\d+/&.0/g 

說明:\v =非常魔法(見help \v),@<!匹配零寬度,如果前一原子不匹配之前什麼如下(見help \@<!)。模式的其餘部分用相同的字符串替換1或多個數字的字符串,然後用.0

+0

這一個是美麗的。人們需要承認這一點。你從我那裏得到一個投票。 – Anders 2010-07-26 07:55:46

+0

這是做到這一點的正確方法 – cozyconemotel 2017-08-04 03:35:46

0

你也可以試試這個 sed's/[0-9]/& .0/g'| SED的/ 0.0 [] * $ // G'

首先SED增加0.0所有數字和第二個刪除您使用要做到這一點末尾的.0