vi字符串替换
在Vi里面實現字符串的批量替換。
a. 文件內全部替換:
%s#abc#def#g(用def替換文件中所有的abc)
例如把一個文本文件里面的“linuxidc.com”全部替換成“linuxidc.net”:
:%s#linuxidc.com#xwen.net#g (如文件內有#,可用/替換,比如:%s/linuxidc.com/xwen.net/g)
b. 文件內局部替換:
把10行到50行內的“abc”全部替換成“def”
:10,50s#abc#def#g(如文件內有#,可用/替換,:%s/abc/def/g)
以上命令如果在g后面再加上c,則會在替換之前顯示提示符給用戶確認(conform)是否需要替換。 比如
:%s#linuxidc.com#linuxidc.net#gc
Vim學習指南 http://www.linuxidc.com/Linux/2013-08/89096.htm
快速學會 Vi編輯器 http://www.linuxidc.com/Linux/2013-08/88586.htm
強大的Vim 編輯器 http://www.linuxidc.com/Linux/2013-07/87544.htm
在CentOS 6.2上搭建Vim開發環境 http://www.linuxidc.com/Linux/2013-07/87363.htm
CentOS 5.4 安裝高亮Vim編輯工具 http://www.linuxidc.com/Linux/2013-06/86508.htm
Vim技巧分享:C語言設置 http://www.linuxidc.com/Linux/2012-12/77124.htm
Ubuntu中設置Vim的行號 http://www.linuxidc.com/Linux/2012-12/75485.htm
Vim編輯器使用基礎教程 http://www.linuxidc.com/Linux/2013-05/84031.htm
本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2015-03/114621.htm
?
?
?
?
1. 基本的替換?
: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?
2. 可以使用 # 作為分隔符,此時中間出現的 / 不會作為分隔符?
:s#vivian/#sky/# 替換當前行第一個 vivian/ 為 sky/?
:%s+/oradata/apras/+/user01/apras1+ (使用+ 來 替換 / ): /oradata/apras/替換成/user01/apras1/?
3. 刪除文本中的^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” < src >dest?
tr -d “\015″ dest?
strings A>B?
4. 其它用法?
利用 :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 放在命令開頭,表示對正文中所有包含搜索字符串的行進行替換操作。
?
?
?
http://banderson.blog.163.com/blog/static/7462337201010122916301/
?
?
?
另轉:
最近在逛CSDN論壇時經常會苦惱一個問題——有些網友貼上去的代碼沒有用規范的格式貼上去,我貼到VIM里常常會需要手動調整格式,非常麻煩。每當這個時候就異常懷念以前用VC6.0時的ALT+F8……想下VIM作為一個程序員們最貼心的編輯器,顯然不會對此坐視不理。經過一番的Search,果然就找到了一些最常用的簡單技巧,筆記一下以備后來不時之需。?
VIM格式化代碼:?
格式化全文指令 gg=G?
自動縮進當前行指令 ==?
????? 格式化當前光標接下來的8行 8=?
????? 格式化選定的行 v 選中需要格式化的代碼段 =?
????? 備注:?
gg —— 到達文件最開始?
= —— 要求縮進?
G???? —— 直到文件尾?
注釋代碼:(這個原理上就是使用VIM的正則替換)?
以C++和Python為例。?
注釋連續行:?
指令格式 :起始行,終止行s/要替換的字符/替換為字符/g?
如,?
????? C++源文件中注釋掉10~20行,指令為:?
:10,20s/^/g?
Python源文件中注釋掉10~20行,指令為:?
:10,20s/^/#/g?
取消連續行注釋:?
指令格式同上。只是要替換字符與替換為字符要互換:?
如,?
????? 取消C++源文件中的10~20行的注釋,指令為:?
:10,20s/^//g?
取消Python源文件中的10~20行的注釋,指令為:?
:10,20s/^#//g
| |
| ?原文地址?http://hi.baidu.com/seesea8/blog/item/b96c8e51eb8f352743a75b41.html |
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: c++中extern,static,co
- 下一篇: vi格式化代码,撤销,重做,回退操作