1.grep参数
-i 忽略大小写
-v 取反 显示除了xx的其它内容
-n 显示行号
-o 显示过程
-e 支持扩展正则(egrep)
-w 只显示xx(前后都没有东西)
-l 只显示文件名,不显示内容
-R 递归过滤
-A (after)显示grep显示出的内容及接下来的几行 例如:1A 1B 1C
-B (before)之前的几行
-C 显示上面和下面几行
-c 统计多少行有xx字母
[root@huahua ~]# find /tmp /etc -type f | xargs grep -l 'oldboy' //在/tmp和/etc中找出包含oldboy的文件的文件名(只想要文件名)
[root@huahua ~]# grep -Rl 'oldboy' /etc/ /tmp/ //先查看/etc/里面的oldboy 再查看/tmp/里面的oldboy,只显示文件名
[root@huahua ~]# seq 10 | grep -A2 '1' //显示1的后2行
[root@huahua ~]# seq 10 | grep -B2 '1' //显示1的前2行
[root@huahua ~]# seq 10 | grep -C2 '1' //显示1的前2行和后2行
查找oldboy.txt有多少行有oldboy
[root@huahua ~]# grep -c 'oldboy' oldboy.txt //可以看到在oldboy.txt文件中,有三行含有oldboy
2.sed功能 增删改查
sed 过滤 替换(修改)取行 增查删改 (参数 条件 命令)
sed 命令执行过程 -n 只显示某一行。取消默认输出 sed查找-p 据行号进行查找
sed 增加
-a 追加内容 -i 插入 -c 把一行内容清空 然后写入
sed删除
-d 删除内容
sed修改
sed ‘s###g‘
s 替换 g 全局替换
sed命令执行过程:找谁干啥
(1)查
-n: 取消默认输出 -p: (print)显示 (有-p就有-n)
(2)增
a (append)添加到某行下面 例如3a 3c 3i
-i: 修改文件内容 c (replace)把这一行内容先清空,然后再写入
i 添加到某行上面
-i.bak 先备份,再修改文件内容
(3)删
-d (delete)删除,需要前面搭配i使用
(4)改
sed ‘s# # #g’ +文件名 s (sed) 替换
g 全局替换
[root@huahua ~]# sed -n '3,5p' oldboy.txt //查找oldboy.txt第3行到第5行
//之间默认用基础正则,如果用扩展正则需要加r
[root@huahua ~]# sed -n '/oldboy/p' oldboy.txt //查找oldboy.txt里面的oldboy
[root@huahua ~]# sed -nr '/oldboy|oldbey/p' oldboy.txt //查找oldboy和oldbey
[root@huahua ~]# sed -n '/oldboy/,/oldbey/p' oldboy.txt //查找oldboy到oldbey(常用)
[root@huahua ~]# sed -n '/oldboy/,/haha/p' oldboy.txt //如果前面有oldboy,后面哈哈没有,就从有oldboy你行一直显示到尾巴
[root@huahua ~]# sed -n '/10:41:00/,/10:45:00/' oldboy.txt //在oldboy.txt下查看从10:41:00到/10:45:00
[root@huahua ~]# sed -n '1p;3p;4p' oldboy.txt //查看1,3,4行
[root@huahua ~]# sed -n 3p oldboy.txt //查找oldboy.txt第3行
[root@huahua ~]# sed -n '1~2p' oldboy.txt //从第1行开始,每次加2行(查看的是1.3.5行,一直到尾巴)
[root@huahua ~]# sed -n '2~2p' oldboy.txt //从第2行开始,每次加2行(查看的是2.4.6行,一直到尾巴)
[root@huahua ~]# sed -n '/^$/p' oldboy.txt //显示空行
[root@huahua ~]# sed -n '/^$/!p' oldboy.txt //不显示空行
[root@huahua ~]# sed -rn '/^开头的内容
[root@huahua ~]# sed '3awe are xxn' oldboy.txt //在第3行下面添加we are xxn,
(用cat显示看不到添加内容,因为实际上没添加进去)
[root@huahua ~]# sed -i '3awe are xxn' oldboy.txt //带上-i才会真正添加进去(用cat可查看的到)
[root@huahua ~]# sed -i '3cwe are beacutiful' oldboy.txt //替换第三行为we are beacuitul
[root@huahua ~]# sed -i '3iyou is fairy' oldboy.txt //i插入指定行上面,
[root@huahua ~]# '3,10d' huahua.txt //删除huahua.txt里面的3-10行(删除内容用//,删行yong‘’)
[root@huahua ~]# sed -i '/haha/,/xixi/d' huahua.txt //删除hha到xixi
[root@huahua ~]# sed '/^$/d ' oldboy.txt //删除oldboy.txt里的空行
[root@huahua ~]# sed -n '/^$/!p' oldboy.txt //不显示空行
[root@huahua ~]# grep -v '^$' oldboy.txt //不显示空行
5.s# # #g’:这个就是固定格式
[root@lsr7 ~]# sed -i 's#enforcing#disabled#g' /etc/selinux/config
[root@lsr7 ~]# sed -i 's/UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
// sed -i 's/ / /g' :语法就这样
6.后向引用:在前面(##)把你要的内容保护起来,再后两个##之间通过、数字来引用(先保护,再使用)
[root@huahua ~]# echo 123456 |sed 's#123456#<123456>#g'
<123456>
[root@huahua ~]# echo 123456|sed -r 's#(.*)#<\1>#g'
<123456>
7.保留awk
[root@huahua ~]# awk '/^$/!' oldboy.txt //保留空行
[root@huahua ~]# awk '!/^$/' oldboy.txt //不保留空行
8.输出想要结果(1)12<34>56
[root@huahua ~]# echo 123456 | sed -r 's#(..)(..)(..)#\1<\2>\3#g'
12<34>56(2)<1><2><3><4><5><6>
[root@huahua ~]# echo 123456 | sed -r 's#(.)#<\1>#g'
<1><2><3><4><5><6>
[root@huahua ~]# echo {1..6} | sed -r 's#([0-9]+)#<\1>#g'
<1> <2> <3> <4> <5> <6>