
1.1 vi下的查找
/hello<Enter>:向下查找hello匹配字符串
?hello<Enter>:向上查找hello匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
hello是需要匹配的字符串,例如:
/name<Enter> #查找name
/name<Enter> #查找name单词(注意前后的空格)
除此之外,hello还可以使用一些特殊字符,包括(/、^、$、*、.),其中前三个这两个是vi与vim通用的,“/”为转义字符。
/^name<Enter> #查找以name开始的行
/name$<Enter> #查找以name结束的行
//^name<Enter> #查找^name字符串
1.2 vi下的替换
:s/name/title/ #替换当前行第一个 name 为 title
:s/name/title/g #替换当前行所有 name 为 title
:n,$s/name/title/ #替换第 n 行开始到最后一行中每一行的第一个 name 为 title
:n,$s/name/title/g #替换第 n 行开始到最后一行中每一行所有 name 为 title
#(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
:%s/name/title/ #(等同于 :g/name/s//title/) 替换每一行的第一个 name 为 title
:%s/name/title/g #(等同于 :g/name/s//title/g) 替换每一行中所有 name 为 title
可以使用 #或+ 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#name/#title/# 替换当前行第一个 name/ 为 title/
:%s+/oradata/apras/+/user01/apras1+ (
使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
2.sed和grep配合
命令:sed -i s/yyyy/xxxx/g `grep yyyy -rl --include="*.txt" ./`
作用:将当前目录(包括子目录)中所有txt文件中的yyyy字符串替换为xxxx字符串。其中,
-i 表示 *** 作的是文件,``括起来的grep命令,表示将grep命令的的结果作为 *** 作文件。
s/yyyy/xxxx/表示查找yyyy并替换为xxxx,后面跟g表示一行中有多个yyyy的时候,都替换,而不是仅替换第一个
另外,如果不需要查找子目录,仅需要在当前目录替换,用sed命令就行了,命令如下:sed -i s/xxxx/yyyy/g ./*.txt
3.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'
查找批量替换文件时,去除某种类型的文件,下面表示在./salt/*下的所有文件中,不包括tar.gz结尾的文件,搜索包含有node01字符串的文件
grep "node01" -rl ./salt/* --exclude=*.tar.gz
其实这里的 -r表示递归,-l表示输出文件名,
也可以将 -rl替换为-rn,-n表示是哪一行,会输出行号详细信息
grep "node01" -rn ./salt/* --exclude=*.tar.gz
替换字符串:
把./salt/*目前下所有文件进行遍历,查是否包含node01字符串的,不包括tar.gz结尾的文件。然后把node01用test01进行批量替换。
grep "node01" -rl ./salt/* --exclude=*.tar.gz | xargs sed -i 's/node01/test01/g'
linux查找和替换目录下所有文件中字符串单个文件中查找替换很简单,就不说了。文件夹下所有文件中字符串的查找替换就要记忆了,最近部署几十台linux服务器,记录下总结。查找文件夹下包含字符串的文件例:查找/usr/local目录下所有包含rubyer.me的文件。1grep
-lr
'rubyer.me'
/usr/local/*vim替换单个文件中所有字符串方法例:替换当前文件中所有old为new
www.zhishiwu.com
1
:%s/old/new/g2#%表示替换说有行,g表示替换一行中所有匹配点。
替换文件夹下包含字符串的文件sed结合grep例:要将目录/www下面所有文件中的zhangsan都修改成lisi,这样做:1
sed
-i
s/old/new/g
`grep
old
-rl
/www`作者
skq
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)