sed -i "s/查找字段/替换字段/g" grep 查找字段 -rl 路径 文件名
- -i 表示inplace edit,就地修改文件
- -r 表示搜索子目录
- -l 表示输出匹配的文件名
- s表示替换,d表示删除
- 不需要排除去掉
exclude
就行 - 或者要排除多个目录呢
--exclude-dir={.git,res,bin}
- 或者排除一些指定后缀名的文件 比如排除扩展名为 java 和 js 的文件
--exclude=*.{java,js}
demo
把当前目录下lishan.txt
里的shan
都替换为hua
sed -i "s/shan/hua/g" lishan.txt
递归替换
把28080替换为18080 在/data/conf/pb-test下查找
sed -i "s/28080/18080/g" `grep "28080" -rl /data/conf/pb-test`
demo2
## 文件内容含有"tct"的字符全部替换为"wt",且排除搜索.git目录
sed -i "s/tct/wt/g" `grep "tct" -rl ./ -R --exclude-dir=.git` xxx.txt
demo3,修改etc/apt/sources.list
源
sudo sed -i "s/mirrors.tuna.tsinghua.edu.cn/mirrors.aliyun.com/g" `grep "mirrors.tuna.tsinghua.edu.cn" -rl ./sources.list`
demo4
修改默认的ubuntu源替换成ali云源
sed -i "s/cn.archive.ubuntu.com/mirrors.aliyun.com/g" `grep "cn.archive.ubuntu.com" -rl /etc/apt/sources.list`
使用sed查找catalina.out日志文件
按照时间查找文件,并导出到临时文件
demo
查找2020-10-22 17:45:00
至2020-10-22 17:50:00
之间的日志内容
sed -n '/2020-10-22 17:45:00/,/2020-10-22 17:50:00/p' catalina.out > test.log
然后可以用less
命令查看这个临时文件
D和回车是往下翻
U和Y是往上翻
less -N test.log
grep
查找包含指定内容的单/多个文件
搜索某个文件里面是否包含字符串
grep "search content" filename
搜索多个文件是否包含某个字符串
grep "search content" filename1 filename2.... filenamen
搜索的内容如果包含特殊字符时,必须进行转义处理,比如搜索 ‘v$temp_space_header’
grep "v\$temp_space_header" *.sql
grep "search content" *.sql
需要显示搜索文本在文件中的行数,可以使用参数-n
grep -n "v\$temp_space_header" *.sql
需要忽略大小写问题,可以使用参数-i
grep "V\$TEMP_SPACE_HEADER" *.sql
文件内容查找不匹配指定字符串的行,即从查询结果中过滤掉那些不想看到的字符
例如查找某些进程时,我们不想显示包含命令grep ora_mmo
的进程
ps -ef | grep ora_mmon | grep -v grep
搜索、查找匹配的行数,即包含指定内容一共有几行
grep -c "被查找的字符串" 文件名
递归搜索某个目录以及子目录下的所有文件,看哪些文件包含指定内容
这个指令可以把内容在文件中搜索出来后直接把对应一行的内容打印到屏幕上
grep -r "v\$temp_space_header" /u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/
如果我们只想获取那些文件包含搜索的内容,即打印屏幕的时候只显示包含内容的文件名
其实这里只是利用了cut -d
命令将内容根据:
分隔开来,然后f1
取第一个域
中的内容,即文件全路径那一段
grep -H -r "v\$temp_space_header" /u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/ | cut -d: -f1
如果只想获取和整个搜索字符匹配的内容,那么可以使用参数w
这里的 -w
也就是word
,即把搜索内容作为一个完整的单词来看,如果是一个单词中包含搜索内容是不会被检索出来的
对比一下两者的区别
grep命令结合find命令搜索
find . -name '*.sql' -exec grep -i 'v\$temp_space_header' {} \; -print