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三剑客的主要内容,如果未能解决你的问题,请参考以下文章

Linux正则表达式与三剑客

#导入Word文档图片# linux三剑客

Linux入门开发: 学习linux三剑客(awksedgrep)(上)

Linux三剑客之grepegrep及正则表达式使用详解

Linux三剑客

Linux三剑客