码迷,mamicode.com
首页 > 系统相关 > 详细

linux三剑客

时间:2020-05-13 20:35:17      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:The   ali   daemon   WAD   指定   技术   记录   overruns   print   

 

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三剑客

标签:The   ali   daemon   WAD   指定   技术   记录   overruns   print   

原文地址:https://www.cnblogs.com/hsgoose/p/12884290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!