linux三剑客
Posted hsgoose
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux三剑客相关的知识,希望对你有一定的参考价值。
grep 过滤查找内容。筛子
sed 取行,替换,删除,追加
awk 取列
1.grep
2.sed
Sed是操作、过滤和转换文本内容的强大工具。
常用功能有对文件实现快速增删改查(增加、删除、修改、查询),
其中查询的功能中最常用的2大功能是过滤(过滤指定字符串)和取行(取出指定行)。
语法:
sed [选项] [sed内置命令字符] [文件]
选项:
-n 取消默认sed的输出,常与sed内置命令的p连用 -i 直接修改文件内容,而不是输出到终端。(-i 的sed后面是要有文件的) -e 多次sed操作 -r 不需要转义(使用反向引用需要)
内置命令符:
sed的内置命令字符说明 s 替换 g 全局global p 打印print 两种情况 1.打印指定行 2.与-n配合 打印修改行 d 删除delete a 添加 默认是指定行末 i 插入 指定行前 // 匹配
说明:
1.关于-n 默认情况下sed会输出所有内容
2. s# # #g中 只有前两个##可以使用正则
练习
环境: [root@oldboyedu ~/test]# cat oldgirl.txt I am oldboy teacher! I like badminton ball ,billiard ball and chinese chess! our site is http://www.oldboyedu.com my qq num is 49000448. 问题1:输出oldboy.txt的第2-3行内容※。 [root@oldboyedu ~/test]# sed -n \'2,3p\' oldgirl.txt I like badminton ball ,billiard ball and chinese chess! our site is http://www.oldboyedu.com [root@oldboyedu ~/test]# head -3 oldgirl.txt |tail -2 I like badminton ball ,billiard ball and chinese chess! our site is http://www.oldboyedu.com 问题2:过滤出含有oldboy字符串的行※。 [root@oldboyedu ~/test]# sed -n \'/oldboy/p\' oldgirl.txt I am oldboy teacher! our site is http://www.oldboyedu.com [root@oldboyedu ~/test]# grep oldboy oldgirl.txt I am oldboy teacher! our site is http://www.oldboyedu.com 问题3:删除含有oldboy字符串的行※。 [root@oldboyedu ~/test]# sed \'/oldboy/d\' oldgirl.txt I like badminton ball ,billiard ball and chinese chess! my qq num is 49000448. [root@oldboyedu ~/test]# grep -v "oldboy" oldgirl.txt I like badminton ball ,billiard ball and chinese chess! my qq num is 49000448. 问题4:将文件中的oldboy字符串全部替换为oldgirl※。 [root@oldboyedu ~/test]# sed \'s#oldboy#oldgirl#g\' oldgirl.txt I am oldgirl teacher! I like badminton ball ,billiard ball and chinese chess! our site is http://www.oldgirledu.com my qq num is 49000448. vim替换: 问题5:将文件中的oldboy字符串全部替换为oldgirl,同时将QQ号码49000448改为31333741。 [root@oldboyedu ~/test]# sed -e \'s#oldboy#oldgirl#2\' -e \'s#49000448#31333741#g\' oldgirl.txt I am oldboy teacher! I like badminton ball ,billiard ball and chinese chess! our site is http://www.oldboyedu.com my qq num is 31333741. 问题6:在oldboy.txt文件的第2行后追加文本。 [root@oldboyedu ~/test]# sed \'2a I teacher linux.\' oldgirl.txt I am oldboy teacher! I like badminton ball ,billiard ball and chinese chess! I teacher linux. our site is http://www.oldboyedu.com my qq num is 49000448. [root@oldboyedu ~/test]# cat oldgirl.txt I am oldboy teacher! I like badminton ball ,billiard ball and chinese chess! our site is http://www.oldboyedu.com my qq num is 49000448. [root@oldboyedu ~/test]# sed -i \'2a I teacher linux.\' oldgirl.txt [root@oldboyedu ~/test]# cat oldgirl.txt I am oldboy teacher! I like badminton ball ,billiard ball and chinese chess! I teacher linux. our site is http://www.oldboyedu.com my qq num is 49000448. [root@oldboyedu ~/test]# sed \'2i I teacher linux.i\' oldgirl.txt I am oldboy teacher! I teacher linux.i I like badminton ball ,billiard ball and chinese chess! I teacher linux. our site is http://www.oldboyedu.com my qq num is 49000448.
3.awk
语法:
awk [option] \'pattern{action}\' file ... awk [参数] \'条件{动作}\' 文件 ...
参数:
-F 指定字段分隔符 -v*
常用变量:
$0 打印所有 $n 打印列 NF 列 NF==1 $NF 最后一列 $(NF-n) 倒数n列 NR 记录行号
说明:
默认情况下 分隔符为空格 相当于[ ]+
练习
test.txt文件内容如下 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 问题1:取test.txt文件的第2行到第3行的内容。 [root@oldboyedu ~]# awk \'NR>1&&NR<4\' oldboyedu.txt bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@oldboyedu ~]# awk \'NR==2,NR==3\' oldboyedu.txt bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 问题2:过滤出含有root字符串的行※。 [root@oldboyedu ~]# awk \'/root/\' oldboyedu.txt root:x:0:0:root:/root:/bin/bash [root@oldboyedu ~]# awk /root/ oldboyedu.txt root:x:0:0:root:/root:/bin/bash [root@oldboyedu ~]# [root@oldboyedu ~]# awk "/root/" oldboyedu.txt root:x:0:0:root:/root:/bin/bash ##建议统一三剑客都用\'\' 问题3:删除含有root字符串的行※。 [root@oldboyedu ~]# awk \'/^[^r]/\' oldboyedu.txt bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [^r] 非r ^[^r] 以非r字符卡头 问题4:取文件的第一列、第三列和最后一列内容,并打印行号※。 [root@oldboyedu ~]# awk -F ":" \'{print NR,$1,$3,$NF}\' oldboyedu.txt 1 root 0 /bin/bash 2 bin 1 /sbin/nologin 3 daemon 2 /sbin/nologin 4 adm 3 /sbin/nologin 5 lp 4 /sbin/nologin 问题5:取出Linux中执行ifconfig eth0后对应的IP地址(只能输出IP地址)。 [root@oldboyedu ~]# ifconfig eth0|awk \'NR==2{print $2}\' 10.0.0.201 C6 [root@oldboy ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:D0:87:20 inet addr:10.0.0.202 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fed0:8720/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:243 errors:0 dropped:0 overruns:0 frame:0 TX packets:67 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:20674 (20.1 KiB) TX bytes:8706 (8.5 KiB) [root@oldboy ~]# ifconfig eth0|awk \'NR==2{print $2}\' addr:10.0.0.202 [root@oldboy ~]# ifconfig eth0|awk \'NR==2{print $2}\'|awk -F ":" \'{print $2}\' 10.0.0.202 [root@oldboy ~]# ifconfig eth0|awk -F "[: ]+" \'NR==2{print $4}\' 10.0.0.202 问题6:过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出 awk -F ":" \'$1~/root/ {print $NF}\' test.txt
关于~
~:匹配
尾
shell中补充awk剩余用法
2020.3.30 goose
以上是关于linux三剑客的主要内容,如果未能解决你的问题,请参考以下文章