vim字串替換及小技巧

2021-06-03 11:45:32 字數 4733 閱讀 5310

vi/vim 中可以使用 :s 命令來替換字串。以前只會使用一種格式來全文替換,今天發現該命令有很多種寫法(vi 真是強大啊,還有很多需要學習),記錄幾種在此,方便以後查詢。

:s/vivian/sky/ 替換當前行第乙個 vivian 為 sky

:s/vivian/sky/g 替換當前行所有 vivian 為 sky

:n,$s/vivian/sky/ 替換第 n 行開始到最後一行中每一行的第乙個 vivian 為 sky

:n,$s/vivian/sky/g 替換第 n 行開始到最後一行中每一行所有 vivian 為 sky

n 為數字,若 n 為 .,表示從當前行開始到最後一行

:%s/vivian/sky/(等同於 :g/vivian/s//sky/) 替換每一行的第乙個 vivian 為 sky

:%s/vivian/sky/g(等同於 :g/vivian/s//sky/g) 替換每一行中所有 vivian 為 sky

可以使用 # 作為分隔符,此時中間出現的 / 不會作為分隔符

:s#vivian/#sky/# 替換當前行第乙個 vivian/ 為 sky/

:%s+/oradata/apras/+/user01/apras1+ (使用+ 來 替換 / ): /oradata/apras/替換成/user01/apras1/

* ************************************

1.:s/vivian/sky/ 替換當前行第乙個 vivian 為 sky

:s/vivian/sky/g 替換當前行所有 vivian 為 sky

2. :n,$s/vivian/sky/ 替換第 n 行開始到最後一行中每一行的第乙個 vivian 為 sky

:n,$s/vivian/sky/g 替換第 n 行開始到最後一行中每一行所有 vivian 為 sky

(n 為數字,若 n 為 .,表示從當前行開始到最後一行)

3. :%s/vivian/sky/(等同於 :g/vivian/s//sky/) 替換每一行的第乙個 vivian 為 sky

:%s/vivian/sky/g(等同於 :g/vivian/s//sky/g) 替換每一行中所有 vivian 為 sky

4. 可以使用 # 作為分隔符,此時中間出現的 / 不會作為分隔符

:s#vivian/#sky/# 替換當前行第乙個 vivian/ 為 sky/

5. 刪除文字中的^m

問題描述:對於換行,window下用回車換行(0a0d)來表示,linux下是回車(0a)來表示。這樣,將window上的檔案拷到unix上用時,總會有個^m.請寫個用在unix下的過濾windows檔案的換行符(0d)的shell或c程式。

· 使用命令:cat filename1 | tr -d 「^v^m」 >newfile;

· 使用命令:sed -e 「s/^v^m//」 filename >outputfilename。需要注意的是在1、2兩種方法中,^v和^m指的是ctrl+v和ctrl+m。你必須要手工進行輸入,而不是貼上。

· 在vi中處理:首先使用vi開啟檔案,然後按esc鍵,接著輸入命令:%s/^v^m//。

· :%s/^m$//g

如果上述方法無用,則正確的解決辦法是:

· tr -d "r" dest

· tr -d "5" dest

· strings a>b

6. 其它

利用 :s 命令可以實現字串的替換。具體的用法包括:

:s/str1/str2/ 用字串 str2 替換行中首次出現的字串 str1

:s/str1/str2/g 用字串 str2 替換行中所有出現的字串 str1

:.,$ s/str1/str2/g 用字串 str2 替換正文當前行到末尾所有出現的字串 str1

:1,$ s/str1/str2/g 用字串 str2 替換正文中所有出現的字串 str1

:g/str1/s//str2/g 功能同上

從上述替換命令可以看到:g 放在命令末尾,表示對搜尋字串的每次出現進行替換;不加 g,表示只對搜尋

字串的首次出現進行替換;g 放在命令開頭,表示對正文中所有包含搜尋字串的行進行替換操作。

2008/01/31 12:34

2007-06-15 13:31

前幾天我記錄一下如何在vim中替換文字。只是很簡單的給出了兩個命令。其實還只是初級功能,今天來看看稍微複雜一點的。

用:%s/from/to 命令只替換每行的第乙個匹配字元,如果要替換每行的所有匹配項,需要在後面加上g命令。如: :%s/from/to/g

另外,我們往往在替換的時候需要很小心,不能夠這樣就全部替換了,需要我們乙個個的確認,那麼我們可以加上c命令,意思就是confirm。如: :%s/from/to/gc 輸入這個命令之後,vim會把所有匹配的文字高亮,並會詢問你 replace with to (y/n/a/q/l/^e/^y) ,輸入y表示替換當前這個,n表示這個不要替換,a表示全部替換,q表示退出,不替換了,l表示把當前這個替換後就退出,^e(ctrl+e,好像大小寫都可以)表示向下滾動一行,^y表示向上滾動一行.

上次我們說了可以在s前面加上範圍,比如:1,5s/from/to表示替換1到5行的from,在vim中有些字元可以很方便的表示一些特殊行,比如.表示當前行,$表示最後一行,第一行當然就是1了.所以我們可以用:.s/from/to命令替換當前行的from,用:.,$s/from/to替換從當前行到結束行的每行的第乙個匹配的from.

好了現在對於vim的文字替換功能有了更一步的了解了.其實這樣的替換還是最簡單的,並且很容易出錯,因為它並不會斷詞,會把from***也當成匹配項,這當然是錯誤的,我們可以加上\《來表示匹配乙個單詞的開始,\>來表示單詞的結束, 命令看起來就像這個樣子:%s/\/to/g

:%s/\r//g 清除那個^m

linux使用grep或者vim刪除空行

grep -v ^$ oldfile > newfile

但是似乎在freebsd下面不行,會不會是grep版本的問題?

後來想到了很刁的vim的全域性替換,最後成功

vim的命令為:%s/^\n//g

意思是全域性替換所有以回車開頭的字元,替換為空。

順便研究了一下

如果有多個連續的空行,想保留乙個

vim的命令為:%s/^\n$//g

vim對中文編碼的支援

1、支援中文編碼的基礎

vim要更好地支援中文編碼需要兩個特性:+multi_byte和+iconv,可以用|:version|命令檢查當前使用的vim是否支援,否則的話需要重新編譯。

2、影響中文編碼的設定項

vim中有幾個選項會影響對多位元組編碼的支援:

3、vim中的編碼轉換

vim內部使用iconv庫進行編碼轉換,如果這幾個選項所設定的編碼不一致,vim就有可能會轉換編碼。開啟已有檔案時會從檔案編碼轉換到 encoding所設定的編碼;儲存檔案時會從encoding設定的編碼轉換到fileencoding對應的編碼。經常會看到vim提示[已轉換],這是表明vim內部作了編碼轉換。終端環境下使用vim,會從termencoding設定的編碼轉換到encoding設定的編碼。

可以用|:help encoding-values|列出vim支援的所有編碼。

4、具體應用環境的設定

set fileencodings=cp936

set fileencoding=cp936

set encoding=cp936

set fileencodings=utf-8

set fileencoding=utf-8

set encoding=cp936 或者 set encoding=utf-8

set fileencodings=ucs-bom,utf-8,cp936

set fileencoding=utf-8

set encoding=cp936 或者 set encoding=utf-8

set termencoding=cp936 或者 set termencoding=utf-8

windows記事本編輯utf-8編碼檔案時會在檔案頭上加上三個位元組的bom:efbbbf。如果fileencodings中設 置ucs-bom的目的就是為了能夠相容用記事本編輯的檔案,不需要的話可以去掉。vim在儲存utf-8編碼的檔案時會去掉bom。去掉bom的最大好 處是在unix下能夠使用cat a b>c來正確合併檔案,這點經常被忽略。

5、faq

為什麼在vim中一次只能刪除半個漢字?

因為encoding設定錯誤,把encoding設定為cp936就可以解決此問題。在unix環境下vim會根據locale來設定預設的encoding,如果沒有正確設定locale並且沒有設定encoding就會一次只能刪除半個漢字。

vim為什麼不能輸入繁體字?

把euc-cn或者gb2312改為cp936就可以了。euc-cn是gb2312的別名,不支援繁體漢字。cp936是gbk的別名,是gb2312的超集,可以支援繁體漢字。

vim為什麼提示不能轉換?

因為在編譯vim時沒有加入iconv選項,重新編譯vim才能解決。

如何開啟乙個gbk編碼的檔案並另存為utf-8編碼?

儲存檔案時執行命令|:set fileencoding=utf-8|就可以了。

VIM 字串替換

vi vim 中可以使用 s 命令來替換字串。以前只會使用一種格式來全文替換,今天發現該命令有很多種寫法 vi 真是強大啊,還有很多需要學習 記錄幾種在此,方便以後查詢。s vivian sky 替換當前行第乙個 vivian 為 sky s vivian sky g 替換當前行所有 vivian ...

vim字串替換

vi vim 中可以使用 s 命令來替換字串。1.s vivian sky 替換當前行第乙個 vivian 為 sky s vivian sky g 替換當前行所有 vivian 為 sky 2.n,s vivian sky 替換第 n 行開始到最後一行中每一行的第乙個 vivian 為 sky n...

vim 字串替換

vi vim 中可以使用 s 命令來替換字串。以前只會使用一種格式來全文替換,今天發現該命令有很多種寫法 vi 真是強大啊,還有很多需要學習 記錄幾種在此,方便以後查詢。s vivian sky 替換當前行第乙個 vivian 為 sky s vivian sky g 替換當前行所有 vivian ...