在Linux下的开发中,经常涉及到对文件中的字符进行处理,其中,对字符的替换操作也是非常的频繁。本文以一个实际的文件为例,详细介绍了Linux下常用的vi替换字符命令,为相关的开发工作提供给了参考。
本文中被操作的文件为TestFile.txt,其中的内容如下:
www@linux:~/linuxidc/Test> cat TestFile.txt
12345678907890
ABCDABCDEFGHIJ
12345^&*()()
98765432103210
abcdabcdefghij123123
先进入vi编辑模式,如下:
www@linux:~/linuxidc/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替换字符命令有很多种,作为一名合格的软件开发工程师,一定要熟练掌握常见字符替换命令的用法。