grep 过滤行
sed 批量修改文件
awk 格式化输出,报告生成器,逻辑语言
一、grep
二、sed
三、awk
四、三剑客-基础部分题目
1.给定文件中查找与条件相符字符串的命令:
grep
2.正则表达式--常用限定符:
^表示开头,如^abc表示以abc开头的
$表示结尾如abc$表示以abc为结尾的
?表示前一个字符出现0或1次,如ab?c表示a与c之间可有0或1个b存在
+ 表示前一个字符出现0或多次。如ab+c表示a与c之间可有1或多个b存在
3.在当前目录下所有.cc 的文件中找到含有“oldboy”内容的文件:
find -type f -name '*.cc' | xargs grep -l "oldboy"
find -type f -name '*.cc' -exec grep -l "oldboy" {} \;
-l --file-with-matches
-r 递归查询
4.找出当前目录下包含127.0.0.1关键字的文件
grep '127.0.0.1' `find . -type f `
sed -n '/127.0.0.1/p' `find . -type f`
awk '/127.0.0.1/' `find . -type f`
5.删除/显示1.file 文件第3行到第7行的内容
删除:
sed -i '3,7d' 1.file
awk '(NR>=3&&NR<=7)' 1.file 把第三行到第七行排除
显示:
sed -n '3,7p' 1.file
awk 'NR==3,NR==7' 1.file
awk 'NR>=3 && NR<=7' 1.file
head -7 1.file | tail -5
1.使用awk取出/etc/passwd第一列数据也就是取出用户名。
awk -F : '{print $1}' /etc/passwd
sed 's#:.*$##g' /etc/passwd
2.用命令行更改config.txt文件,把里面所有的“name”更改为“address”
sed -i 's#name#address#g' config.txt
vim config.txt
:%s
awk '{gsub(/name/,""address)}1' config.txt
3.写出查询file.txt以abc结尾的行
grep 'abc$' file.txt
sed -n '/abc$/p' file.txt
awk '/abc$/' file.txt
4.删除file.txt文件中的空行
grep -v '^$' file.txt
sed '/^$/d' file.txt
awk '!/^$/' file.txt
文件中的空行可能是只有空格的行:
grep -v '^ *$' file.txt
sed -n '/^ *$/p' file.txt
awk '/^ *$/' file.txt
5.打印file.txt文件中的第10行
sed -n '10p' file.txt
head -10 file.txt| tail -1
awk 'NR=10' file.txt
1.删除/etc/fstab文件中所有以
2.查找最后修改时间是3天前,后缀是*.log的文件并删除
find /tmp/ -type -f -mtime -3 -name "*.log" | xargs rm -f
find /tmp/ -type -f -mtime -3 -name "*.log" -exec rm -f {} \;
find /tmp/ -type f -mtime +3 -name '*.log' -exec rm {} +
\; -exec find 命令找出 1 个文件就把文件放在{}的位置
+;如果-exec后面使用+ find会把前面找到的所有文件1次性的放在{}所在位置
3.查找文件中1到20行之间,同时将"aaa"替换为"AAA",“ddd"替换"DDD”
sed '1,20y/ad/AD/' 2.txt
sed -ne 's#a#A#g;s#d#D#g;1,20p' 2.txt
4.使用sed命令打印出文件的第一行到第三行
ed -n '1,3p' file.txt
awk 'NR>=1&&NR<=3' file.txt
head -3 file.txt
5.在/var/sync/log/cef_watchd-20080424.1og文件中查找大小写不敏感“mysql"字符串中的命令是:
grep -iw 'mysql' /var/sync/log/cef_watchd-20080424.1og
1.把data目录及其子目录下所有以扩展名.txt结尾的文件中包含oldgirl的字符串全部替换为oldboy.
sed -i 's#oldgirl#oldboy#g' `find /data/ -type f -name '*.txt'`
2.查看linux服务器ip的命令,同时只显示包含ip所在的行打印出来
ip a s ens33 | sed -n '3p' | sed -r 's#^.*t ([0-9].*)/.*$#\1#g'
ip a s ens33 | sed -n '3p' | awk '{print $2;}' | awk -F / '{print $1;}'
sed语法:-r 使用正则表达式
3.用awk获取文件中第三行的倒数第二列字段
awk 'NR==3{print $(NF-1)}' file.txt
4.请用shell查询file1里面空行的所在行号
grep -n '^$' file.txt
awk '/^$/{print NR,$0}' file1.txt
5.显示file文件里匹配foo字串那行以及上下5行、显示foo及前5行、显示foo及后5行
grep -A5 'foo' file.txt 后5行
grep -B5 'foo' file.txt 前5行
grep -C5 'foo' file.txt 上下5行
1.查找file.log文件中的包含关键字“helloworld”的内容,及其上下两行的内容重定向保存到1.txt
grep -C2 'helloworld' file.log >> 5.txt
2.当前系统中没有任何文本编辑器(vi,emacs,vim,edit等),如何过滤掉注释行和空行查看/etc/ssh/sshd_config文件
sed -r '/^#|^$/d' /etc/ssh/sshd_config
awk '!/^$|^#/' /etc/ssh/sshd_config
3.从a.log文件中提取包含“WARNING”或“FATAL”,同时不包含“IGNOR”行,然后,提取以“:”分割的第五个字段
awk -F: '/WARNING|FATAL/&&!/IGNOR/{print $5}'
4.文件内容排序、文件行取唯一值的命令分别是
sort
uniq 除文件中的重复内容行
5.awk统计当前主机的并发访问量
netstat -ant | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
LISTEN 14
ESTABLISHED 2
SYN_SENT 1