Linux 三剑客是(grep,sed,awk)三者的简称,他们通常结合正则一起使用。 grep擅长查找,sed擅长修改文件。awk擅长取列。
一、grep
grep是一个文本过滤工具,可以全局搜索文件中的内容
参数说明
案例演示:
[root@master-129 myshell]# grep -n "are" 1.txt
4:10 There are orange,apple,mongo
[root@master-129 myshell]# grep -n "are" ./*
./1.txt:4:10 There are orange,apple,mongo
[root@master-129 myshell]# grep '^root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
二、awk介绍
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。可以理解为字符串进行分组。
-F 后面可以写分隔符
cat /etc/passwd | awk -F[:] '{print $1,$3}'
cat /etc/passwd | awk -F[:] '{print $NF,NR}'
-F是根据":" 分组,NF和NR内置参数,NF是列数,NR是行数
cat /etc/passwd | awk '{count++}END{ print count}'
ls -l | awk 'BEGIN{size=0}{size=size+$5}END{print size}'
三、sed
是一种支持正则表达式的非交互式流编辑器
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
sed的常用选项
最常见的替换命令
sed -i 's/a/b/g' 1.txt
-i 直接替换,s//g标准格式 中间的a/b就是 被替换和替换词
当需要从第N处匹配开始替换时,可以使用 /Ng:
echo sksksksksksk | sed 's/sk/SK/2g'
skSKSKSKSKSK
echo sksksksksksk | sed 's/sk/SK/3g'
skskSKSKSKSK
echo sksksksksksk | sed 's/sk/SK/4g'
skskskSKSKSK
1、删除空白行
sed '/^$/d' file
2、删掉第二行
sed '2d' file
3、删除文件中所有开头是test的行
sed '/^test/'d file
4、删除文件的最后一行
sed '$d' file
sed 功能太多了,最常见的就是替换,这种字符串可以使用php、python脚本去操作,感觉方便一些
四、面试题
grep "abc" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'
xargs命令是传参到命令行
http://182.92.175.10:81/index.html
http://182.92.175.11:81/index2.html
http://182.92.175.12:81/index3.html
http://182.92.175.13:81/index4.html
http://182.92.175.14:81/index5.html
http://182.92.175.14:81/index6.html
cat ip.txt | awk -F[/] '{print $3}' | sort | uniq -c | sort -nr
awk 根据 / 分组,输出低3列,进行排序sort,然后根据uniq进行分组,最后sort再排序 -nr
sort -nr表示 -n依照数值的大小排序 -r相反排序从大到小排序
uniq -c命令统计前,比较要先排序。
netstat -an | grep 'ESTABLISHED' | awk -F " " '{print $5}' | awk -F ":" '{print $1}' | sort | uniq -c | sort -nr
1
1
1
2
2
3
3
3
4
4
5
6
[root@master-129 myshell]# sort -n 2.txt | awk '{sum+=$1;print $1} END {print "和是="sum}'
1
1
1
2
2
3
3
3
4
4
5
6
和是=35
find /root/myshell/ -name '*.*' | wc -l
find /root/myshell -name '*.*' | xargs wc -l