grep命令是Linux系统中最重要的命令之一,功能是从文本文件
或管道数据流
中筛选匹配的行
和数据
,若是再配合正则表达式
,功能十分强大,是Linux运维人员必备的命令html
语法:linux
grep [options] [pattern] [file] 命令 参数 匹配模式 文件数据
grep命令里的匹配模式
就是你想要找的东西,能够是普通的文字符号
,也能够是正则表达式面试
参数选项 | 解释说明 |
---|---|
-v | 排除匹配结果 |
-n | 显示匹配行与行号 |
-i | 不区分大小写 |
-c | 只统计匹配的行数 |
-E | 使用egrep命令 |
--color=auto | 为grep过滤结果添加颜色 |
-w | 只匹配过滤的单词 |
-o | 只输出匹配的内容 |
案例正则表达式
cat /etc/passwd > /tmp/test_grep.txt grep "login" /tmp/test_grep.txt -n #找出login有关行 grep "login" /tmp/test_grep.txt -n -v #找出没有login的行 grep "ROOT" /tmp/test_grep.txt -i #忽略大小写,找出root有关行 grep -E "root|sync" /tmp/test_grep.txt --color=auto #同时过滤出root和sync有关行 grep "login" /tmp/test_grep.txt -c #统计匹配结果的行数 grep "login" /tmp/test_grep.txt -n -o #只输出匹配出的内容 grep "oldboy" /tmp/test_grep.txt -w #完整匹配,字符串精确匹配,整个单词 grep -E "^#|^$" /tmp/test_grep.txt #过滤掉空白和注释行
sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器。编程
sed是操做、过滤和转换文本内容的强大工具。经常使用功能包括对文件实现快速增删改查,其中查询的功能中最经常使用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。app
语法:运维
sed [选项] [sed内置命令字符] [输入文件]
选项:编程语言
参数选项 | 解释 |
---|---|
-n | 取消默认sed的输出,常与sed内置命令p一块儿用 |
-i | 直接将修改结果写入文件,不用-i,sed修改的是内存数据 |
sed的内置命令字符
用于对文件进行不一样的操做功能,如对文件增删改查编辑器
sed经常使用内置命令字符
:函数
sed的内置命令字符 | 解释 |
---|---|
a | append,对文本追加,在指定行后面添加一行/多行文本 |
d | Delete,删除匹配行 |
i | insert,表示插入文本,在指定行前添加一行/多行文本 |
p | Print ,打印匹配行的内容,一般p与-n一块儿用 |
s/正则/替换内容/g | 匹配正则内容,而后替换内容(支持正则),结尾g表明全局匹配 |
案例:
[root@pylinux tmp]# cat student.txt 1,oldboy,100 2,alex,99 3,wupeiqi,80 4,yuchao,60 #不加-i参数,如下命令都不会写入如文件,仅修改内存数据 sed 'a heiheihei' student.txt #匹配每一行,在下一行添加heiheihei sed '2a heiheihei' student.txt #在第二行下面,添加heiheihei sed '3d' student.txt #删除第三行 sed '2i haha' student.txt #在第二行上面,添加haha sed '2a heiha\ndadada' student.txt #在第二行下面,添加多行数据 sed '1,2d' student.txt #删除1和2行 sed 's/wupeiqi/WUPEIQI/g' student.txt #吧wupeiqi换成WUPEIQI sed 's#wupeiqi#WUPEIQI#g' student.txt #效果同上 sed '2p' student.txt -n #打印第二行的内容,sed默认显示全部结果,-n不显示默认输出 sed '1,3p' student.txt -n #显示1到3行的内容 sed '11,$d' student.txt #删除11行一直到文件结尾
awk是Linux实际工做中最重要的强大工具.
awk不只是Linux系统一个命令,也是种编程语言,能够处理数据/文件生成Excel。
语法:
awk [option] 'pattern{action}' file .. 命令 参数 '条件{动做}' 文件..
参数:
参数 | 解释 |
---|---|
-F | 指定字段分割 |
-v | 定义或修改awk内部变量 |
案例:
awk 'NR==2,NR==5' test_grep.txt #显示第2到5行之间的内容
awk '{print NR,$0}' test_grep.txt #给全部内容加上行号,如同实现cat -n 解释:NR 表示行号,$0表示一整行的内容,print是awk的命令,打印出结果,{print NR,$0}是awk固定语法
awk 'NR==2||NR==6 {print NR,$0}' test_grep.txt #显示文本的第二行和第六行 awk 'NR==2,NR==6 {print NR,$0}' test_grep.txt #显示文本的第二行到第六行
awk -F ":" '{print NR,$1,$3,$NF}' test_grep.txt 解释:-F 指定分隔符,以冒号分割 '{print NR,$1,$3,$NF}' 打印出NR行号,$1第一列 $3第三列 $NF最后一列,注意$0表示整行
awk '{gsub("bin","BIN",$0);print $0}' test_grep.txt 解释:gsub("想替换的内容","替换后的内容",在一整行都替换;显示替换后的整行结果)
方法一:[root@pylinux tmp]# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.141.32.137 netmask 255.255.192.0 broadcast 10.141.63.255 ether 52:54:00:4f:ab:36 txqueuelen 1000 (Ethernet) RX packets 32262057 bytes 4978629753 (4.6 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 38885574 bytes 7916319323 (7.3 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ifconfig eth0| awk -F "inet|netmask" 'NR==2 {print $2}' 解释:由于这里信息左右两边是inet和netmask,所以以它俩分割 显示第二行的结果,第二列的信息 方法二: [root@pylinux tmp]# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:4f:ab:36 brd ff:ff:ff:ff:ff:ff inet 10.141.32.137/18 brd 10.141.63.255 scope global eth0 valid_lft forever preferred_lft forever ip addr show eth0 |awk -F "inet|/18" 'NR==3 {print $2}' 解释:同理 方法三:用不一样的分隔符处理 ifconfig eth0|awk -F " " 'NR==2 {print $2}'
处理以下文件内容,将域名
取出且根据域名计数排序
https://www.baidu.com/index.html https://sohu.com/index.html https://sports.sohu.com/index.html https://sports.sohu.com/index2.html https://sports.sohu.com/index3.html http://it.sohu.com/index.html http://it.sohu.com/index2.html
解法:
awk -F "/" '{print $3}' test_html.txt |sort|uniq -c