在Linux下的開發中,經常涉及到對文件中的字符進行處理,其中,對字符的替換操作也是非常的頻繁。
本文以一個實際的文件為例,詳細介紹了Linux下常用的vi替換字符命令,為相關的開發工作提供給了參考。
本文中被操作的文件為TestFile.txt,其中的內容如下:
zhou@linux:~/zhouzx/Test> cat TestFile.txt
12345678907890
ABCDABCDEFGHIJ
12345^&*()()
98765432103210
abcdabcdefghij123123
先進入vi編輯模式,如下:
zhou@linux:~/zhouzx/Test> vi TestFile.txt
依次執行以下替換命令(注意:每條命令都要以冒號“:”開頭),其中替換部分用紅色字體標注。
1) :n,$s/str1/str2/
將第n行開始到最後一行中每一行的第一個str1替換為str2。
例如,在TestFile.txt文件的vi編輯模式下執行:
:2,$s/123/321/
文件內容變為:
12345678907890
ABCDABCDEFGHIJ
32145^&*()()
98765432103210
abcdabcdefghij321123
可見,只有第三行和第五行的第一個“123”變成了“321”。第一行的“123”沒有被替換,因為命令是從第二行開始執行的。
2) :n,$s/str1/str2/g
將第n行開始到最後一行中每一行所有str1替換為str2。
緊接著上一條命令執行:
:2,$s/3210/1234/g
文件內容變為:
12345678907890
ABCDABCDEFGHIJ
32145^&*()()
98765412341234
abcdabcdefghij321123
可見,從第二行開始的所有的“3210”都變成了“1234”。
3) :%s/str1/str2/
將每一行的第一個str1替換為str2。
緊接著上一條命令執行:
:%s/123/321/
文件內容變為:
32145678907890
ABCDABCDEFGHIJ
32145^&*()()
98765432141234
abcdabcdefghij321321
可見,每一行的第一個“123”都變成了“321”。
4) :%s/str1/str2/g
將每一行中所有str1替換為 str2。
緊接著上一條命令執行:
:%s/890/098/g
文件內容變為:
32145670987098
ABCDABCDEFGHIJ
32145^&*()()
98765432141234
abcdabcdefghij321321
可見,每一行的所有“890”都變成了“098”。
5) :s/str1/str2/
將行中首次出現的字符串str1用字符串str2替換。
緊接著上一條命令執行:
:s/098/890/
文件內容變為:
32145678907098
ABCDABCDEFGHIJ
32145^&*()()
98765432141234
abcdabcdefghij321321
可見,只有第一行的第一個“098”變成了“890”。
6) :s/str1/str2/g
將行中所有出現的字符串str1用字符串str2替換。
緊接著上一條命令執行:
:s/321/123/g
文件內容變為:
12345678907098
ABCDABCDEFGHIJ
32145^&*()()
98765432141234
abcdabcdefghij321321
可見,第一行的所有“321”變成了“123”。
7) :.,$ s/str1/str2/g
將正文當前行到末尾所有出現的字符串str1用字符串str2替換。
緊接著上一條命令執行:
:.,$ s/1/2/g
文件內容變為:
22345678907098
ABCDABCDEFGHIJ
32245^&*()()
98765432242234
abcdabcdefghij322322
可見,所有的“1”都變成了“2”。
8) :1,$ s/str1/str2/g
將正文中所有出現的字符串str1用字符串str2替換。
緊接著上一條命令執行:
:1,$ s/22/33/g
文件內容變為:
33345678907098
ABCDABCDEFGHIJ
33345^&*()()
98765433343334
abcdabcdefghij333333
可見,所有的“22”都變成了“33”。
9) :g/str1/s//str2/g
將正文中所有出現的字符串str1用字符串str2替換。
緊接著上一條命令執行:
:g/33/s//22/g
文件內容變為:
22345678907098
ABCDABCDEFGHIJ
22345^&*()()
98765422342234
abcdabcdefghij222222
可見,所有的“33”都變成了“22”。
從以上替換命令的執行可以看出:
1) 所有命令都要以冒號“:”開頭。
2) 所有命令既可以替換單個的字符,也可以替換字符串。
3) 如果“g”放在命令末尾,表示對搜索字符串的每次出現進行替換;如果不加“g”,表示只對搜索字符串的首次出現進行替換;而如果“g”放在了命令開頭,表示對正文中所有包含搜索字符串的行進行替換操作。
Linux下vi替換字符命令有很多種,作為一名合格的軟件開發工程師,一定要熟練掌握常見字符替換命令的用法。
本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/