linux 查找替换(vim查找替换命令)
各位老铁们好,相信很多人对linux 查找替换都不是特别的了解,因此呢,今天就来为大家分享下关于linux 查找替换以及vim查找替换命令的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
Linux中vi的查找、替换、删除操作
vi查找替换命令详解
一、查找查找命令/patternEnter:向下查找pattern匹配字符串?patternEnter:向上查找pattern匹配字符串使用了查找命令之后,使用如下两个键快速查找:n:按照同一方向继续查找N:按照反方向查找字符串匹配pattern是需要匹配的字符串,例如:
1:/abcEnter #查找abc2:/ abc Enter #查找abc单词(注意前后的空格)
除此之外,pattern还可以使用一些特殊字符,包括(/、^、$、*、.),其中前三个这两个是vi与vim通用的,“/”为转义字符。
1:/^abcEnter #查找以abc开始的行 2:/test$Enter #查找以abc结束的行 3://^testEnter #查找^tabc字符串
二、替换基本替换
1::s/vivian/sky/ #替换当前行第一个 vivian为 sky2::s/vivian/sky/g #替换当前行所有 vivian为 sky3::n,$s/vivian/sky/ #替换第 n行开始到最后一行中每一行的第一个 vivian为 sky4::n,$s/vivian/sky/g #替换第 n行开始到最后一行中每一行所有 vivian为 sky5:(n为数字,若 n为.,表示从当前行开始到最后一行)6: 7::%s/vivian/sky/ #(等同于:g/vivian/s//sky/)替换每一行的第一个 vivian为 sky8::%s/vivian/sky/g #(等同于:g/vivian/s//sky/g)替换每一行中所有 vivian为 sky
可以使用#或+作为分隔符,此时中间出现的/不会作为分隔符
1::s#vivian/#sky/# 替换当前行第一个 vivian/为 sky/2::%s+/oradata/apras/+/user01/apras1+(3:使用+来替换/):/oradata/apras/替换成/user01/apras1/
删除文本中的^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键,接着输入命令:
1::%s/^V^M//2::%s/^M$//g
如果上述方法无用,则正确的解决办法是:
1: tr-d“/r” src dest2: tr-d“/015″ dest3: 4: strings AB
其它用法
1::s/str1/str2/ #用字符串 str2替换行中首次出现的字符串 str12::s/str1/str2/g #用字符串 str2替换行中所有出现的字符串 str13::.,$ s/str1/str2/g #用字符串 str2替换正文当前行到末尾所有出现的字符串 str14::1,$ s/str1/str2/g #用字符串 str2替换正文中所有出现的字符串 str15::g/str1/s//str2/g #功能同上
从上述替换命令可以看到:g放在命令末尾,表示对指定行的搜索字符串的每次出现进行替换;不加 g,表示只对指定行的搜索字符串的首次出现进行替换;g放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。也就是说命令的开始可以添加影响的行,如果为g表示对所有行;命令的结尾可以使用g来表示是否对每一行的所有字符串都有影响。三、简单的vim正则表达式规则在vim中有四种表达式规则:magic(/m):除了$.*^之外其他元字符都要加反斜杠nomagic(/M):除了$^之外其他元字符都要加反斜杠/v(即 very magic之意):任何元字符都不用加反斜杠/V(即 very nomagic之意):任何元字符都必须加反斜杠vim默认使用magic设置,这个设置也可以在正则表达式中通过/m/M/v/V开关临时切换。例如:
1://m.* #查找任意字符串2://M.* #查找字符串.*(点号后面跟个星号)3: 4://v(a.c){3}$ #查找行尾的abcaccadc5://m(a.c){3}$ #查找行尾的(abc){3}6://M(a.c){3}$ #查找行尾的(a.c){3}7://V(a.c){3}$ #查找任意位置的(a.c){3}$
推荐使用默认的magic设置,在这种情况下,常用的匹配有:
1://abc #查找以test开始的字符串 2:/abc/ #查找以test结束的字符串 3: 4:$ 匹配一行的结束 5: ^ 匹配一行的开始 6:/ 匹配一个单词的开始,例如//abcEnter:查找以abc开始的字符串 7:/ 匹配一个单词的结束,例如/abc/Enter:查找以abc结束的字符串 8: 9:* 匹配0或多次10:/+ 匹配1或多次11:/= 匹配0或1次12: 13:. 匹配除换行符以外任意字符 14:/a 匹配一个字符15:/d 匹配任一数字 16:/u 匹配任一大写字母17: 18: [] 匹配范围,如t[abcd]s匹配tas tbs tcs tds19:/{} 重复次数,如a/{3,5}匹配3~5个a20:/(/) 定义重复组,如a/(xy/)b匹配ab axyb axyxyb axyxyxyb...21:/| 或,如:for/|bar表示匹配for或者bar22: 23:/%20c 匹配第20列24:/%20l 匹配第20行
vi+文件名,可以创建一个文件
用cat+问价名,可以查看一个文件
用cut-f3+文件名,可以选择文件中的第3段字符
输入英文的冒号:然后输入wq可以保存文件内容并退出
输入英文的冒号:然后输入q可以放弃保存并退出
输入英文的冒号/然后输入一个字符串,可以查找该字符串
如果以上经验帮到您,麻烦在左下角给点个赞,谢谢!
如何在 Vim/Vi 中快速查找和替换文本内容
Vim是 Vi多模式命令行编辑器的加强版,通常默认的Unix或Linux系统中都默认自带Vi命令编辑器。当然,为了更好的体验,如果系统默认没有安装Vim,建议安装Vim。
通过本文的讲解,你将学会如何在Vim/Vi中快速的使用命令进行查找替换文本。
首先,启动Vim/Vi编辑器,处于正常模式下。如果你不确定是否处于正常模式下,这时你可以按“ESC”,编辑器就会进入正常模式。
替换命令的格式一般如下:
该命令表示在[range]的每一行中搜索{pattern},并将其替换为{string}。 [count]是一个乘以命令的正整数。
如果没有给出[range]和[count],则仅替换当前行中找到的模式。
例如,要搜索当前行中字符串“foo”的首次出现,并将其替换为“bar”,可以使用:
要替换当前行中搜索到的所有内容,可以添加 g标志:
如果想搜索和替换整个文件中的匹配内容,使用百分比字符%作为范围。此字符指示从文件第一行到最后一行的范围:
如果省略{string}部分即上面的bar,则将其视为空字符串,相当于将匹配到的内容替换为空,既删除匹配到的内容。
以下命令删除当前行中字符串“foo”的所有实例:
当然,除了作为分隔符外,还可以使用任何其他非字母数字单字节字符,而不是斜杠字符(/)。例如:
要确认每个替换,可以使用 c标志。
替换前会询问:
按 y替换匹配项,或按l替换匹配项并退出。按 n跳过当前匹配,按 q或 Esc退出替换。 a选项替换匹配项和所有剩余匹配项。
若要向下滚动屏幕,请使用 CTRL+ Y,向上滚动,请使用 CTRL+ E。
还可以使用正则表达式作为搜索模式,例如:
^符号表示与行首匹配,.*表示匹配任意数量的字符。
默认情况下,搜索操作区分大小写;搜索“FOO”将与“FOo”不匹配。
要忽略搜索模式的案例,请使用 i标志:
另一种强制忽略案例的方法是在搜索模式后添加\c。例如,/Linux\c执行忽略大小写搜索。
当未指定范围时,替换命令仅在当前行中操作。
范围可以是一行,也可以是两行之间的范围。行说明符之间可用英文,分隔;字符分割。可以使用绝对行号或特殊符号指定范围。
例如,要在从第3行到第10行的所有行中将所有出现的“ foo”替换为“ bar”,可以使用:
该范围是包含范围的,这意味着该范围包括第一行和最后一行。
.字符表示当前行,$美元符号表示最后一行。要在从当前行到最后一行的所有行中替换“ foo”:
也可以使用“+”或“-”符号来设置行说明符,其后是从前一个行号添加或减去的数字。如果省略符号后的数字,则默认为1。
例如,从当前行和接下来的四行开始,用“ bar”替换每个“ foo”,键入:
替代命令将模式作为字符串而不是整个单词查找。例如,如果您正在搜索“ gnu”,则搜索查找匹配“ gnu”嵌入在较大单词(例如“cygnus”或“magnum”)中的情况。
要搜索整个单词,请键入\<标记单词的开头,输入搜索模式,键入>标记单词的结尾:
例如,要搜索单词“ foo”,可以使用\<foo\>:
Vim会跟踪您在当前会话中运行的所有命令。
要浏览历史记录以查找先前的替代命令,请输入:s并使用向上或向下箭头键查找先前的替代操作。要运行该命令,只需按Enter。您也可以在执行操作之前编辑命令。
注释行(在行前添加#)从5到20:
取消注释行从5到20,恢复以前的更改:
将“苹果”,“橙色”和“芒果”的所有实例替换为“水果”:
删除每行末尾的空格:
搜索和替换在Vim中是一个非常强大的功能,学会使用它能使您可以快速更改文本,提高自己的工作效率。
欢迎通过查看我个人介绍信息,私信跟我沟通!
linux中批量查找替换文本内容例子
.批量查找某个目下文件的包含的内容,例如:
# grep-rn"要找查找的文本"./
2.批量查找并替换文件内容。
# sed-i"s/要找查找的文本/替换后的文本/g" `grep-rl"要找查找的文本"./`
sed的其他用法如下:
1、删除行首空格
sed's/^[ ]*//g' filename
sed's/^*//g' filename
sed's/^[[:space:]]*//g' filename
2、行后和行前添加新行
行后:sed's/pattern//n/g' filename
行前:sed's/pattern//n/g' filename
代表pattern
3、使用变量替换(使用双引号)
sed-e"s/$var1/$var2/g" filename
4、在第一行前插入文本
sed-i'1 i/插入字符串' filename
5、在最后一行插入
sed-i'$ a/插入字符串' filename
6、在匹配行前插入
sed-i'/pattern/ i"插入字符串"' filename
7、在匹配行后插入
sed-i'/pattern/ a"插入字符串"' filename
8、删除文本中空行和空格组成的行以及#号注释的行
grep-v ^# filename| sed/^[[:space:]]*$/d| sed/^$/d
find命令
find-name'要查找的文件名'| xargs perl-pi-e's|被替换的字符串|替换后的字符串|g'
#查找替换当前目录下包含字符串并进行替换
find-name'*.txt'| xargs perl-pi-e's|智慧乡村|北部山区|g'
#递归查找替换
find.-type f-name'*.html'| xargs perl-pi-e's|智慧乡村|北部山区|g'
#搜索目录LOG包含显示出来
find./-name'*log*'-type d
find./-name'*Log*'-type d more
当然还可以利用 linux vim批量替换
只对当前行进行替换:
Example
:s/XXX/YYY/g
,如果需要进行全部替换:
Example
:%s/XXX/YYY/g
如果需要对指定部分进行替换,可以用V进入visual模式,再进行
Example
:s/XXX/YYY/g
或者可以指定行数对指定范围进行替换:
Example
:10,31s/XXX/YYY/g
若需要显示行号,在vim下
Example
:set nu
取消显示行号:
Example
:set nonu
:s/well/good/替换当前行第一个 well为 good
:s/well/good/g替换当前行所有 well为 good
:n,$s/well/good/替换第 n行开始到最后一行中每一行的第一个 well为 good
:n,$s/well/good/g替换第 n行开始到最后一行中每一行所有 well为 good
n为数字,若 n为.,表示从当前行开始到最后一行
:%s/well/good/(等同于:g/well/s//good/)替换每一行的第一个 well为 good
:%s/well/good/g(等同于:g/well/s//good/g)替换每一行中所有 well为 good
可以使用#作为分隔符,此时中间出现的/不会作为分隔符
:s#well/#good/#替换当前行第一个 well/为 good/
:%s#/usr/bin#/bin#g可以把文件中所有路径/usr/bin换成/bin