Vi/VIM查找和替换所有文本替换命令

时间:2020-01-09 10:44:06  来源:igfitidea点击:

如何在Linux操作系统上找到所有出现的单词eth0并将其替换为br0?

vi和vim文本编辑器均提供替代命令。
它用于查找/搜索和替换文本。
本教程说明如何使用替代命令查找和替换vim/vi文本。

VIM搜索和替换语法

语法如下:

:%s/Search/Replace/CommandFlag
:%s/Search-Word/Replace-Word/g
:%s/Search-Word/Replace-Word/g
:%s/Search-Word/Replace-Word/gc
## Search and replace in the current line only ##
:s/Find-Word/Replace-Word/gc
## Change each 'Unix' to 'Linux' for all lines from line 36 to line 42 ##
:36,42s/Unix/Linux/g

VIM查找并替换

vi和vim都提供:s命令来进行搜索和替换。
让我们看一些易于理解的例子。

例子

我将使用以下示例文本文件:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## full acess to lo and eth0 ##
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT

# log spoof
-A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP DROP SPOOF A: "
-A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

-A INPUT -i eth1 -s 172.16.0.0/12 -j LOG --log-prefix "IP DROP SPOOF B: "
-A INPUT -i eth1 -s 172.16.0.0/12 -j DROP

要在"仅当前行"中查找每个eth0出现,并将其替换为br0,请输入(首先按" Esc"键并执行):

:s/eth0/br0/g

接下来尝试在vim下用br1查找并替换所有出现的eth1,执行:

:%s/eth1/br1/g

搜索并用br1替换所有出现的eth1,但首先在vim上要求确认,执行:

:%s/eth1/br1/gc

要查找所有不区分大小写的eth1并将其替换为br1,请执行:

:%s/eth1/br1/gi

上面的示例将找到eth1,ETH1,eTh1,ETh1等,并替换为br1。
要查找3到7行中所有出现的eth1并用br1替换,请执行:

:3,7s/eth1/br1/g

快速演示

动画gif 01:Vim查找和替换演示

替代语法

完整语法如下:

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

因此,对于[range]中的每一行,请将{pattern}的匹配项替换为{string}。

{pattern}是一个或者多个分支。

{string}可以是文字字符串。
当省略[范围]和[计数]时,仅在当前行替换。
如果指定了[count],请从[range]的最后一行开始在[count]行中进行替换。
如果省略[range],则从当前行开始。

[count]必须为正数。

在每一行上,删除整个单词Sysadmin的所有出现

是的,我们也可以删除单词:

:%s/\//g

如何删除整个单词method_的第一个匹配项以及随后的3个字符?

:%s/\.\{3}//

仅搜索和替换当前行

仅在当前行中找到bin的每个出现,然后在wrapper.sh中将其替换为sbin:

:%s/bin/sbin/gc