(day14)Linux三剑客入门知识与配合正则

一、sed(流编辑器)

是操作、过滤和转换文本内容的强大工具。常用功能有对文件实现快速增删改查,其中查询的功能中最常用的2大功能是过滤(过滤指定字符串)和取行(取出指定行)

最强2大的是取行和替换*

1、语法格式

sed [选项] [sed内置命令字符] [输入文件]

  • -n:取消默认sed的输出,常于sed内置命令的p连用(输出想要的内容)

  • p:全拼print,表示打印匹配行的内容,通常p会与选项-n一起使用

  • -i:直接修改文件内容,而不是输出到终端。如果不使用-i选项sed只是修改在内存中的数据,并不会影响磁盘上的文件。修改前备份,cp,-i.bak

  • -e:允许多次编辑

  • -r:支持扩展正则表达式

2、内置命令符:

  • p:打印
  • d:delete删除
  • =:行号
  • ()\1 后向引用

3、【替换】

  • s        替换
  • g        全局

4、插入(了解)

  • a:apend追加
  • i:insert插入

5、测试:

(1)取ql.txt 4行

(1)sed -n '2,4p' ql.txt

(2)head -4 ql.txt |tail -1        #使用 head -4 ql.txt 获取文件的前 4 行。再通过 tail -1 从这 4 行中取最后 1 行,也就是第 4 行。

(3)awk 'NR==4' ql.txt

 (2)过滤出含有oldboy字符串的行(格式'//p')

方法一:

方法二:

(3)删除含有oldboy字符串的行

sed '/oldboy/d' ql.txt        #如果加n就不会输出了

(4)删除2-4行

sed '2,4d' ql.txt

(5)修改文件并备份

[root@qulan test]# cp ql.txt{,.ori}
[root@qulan test]# ls
b.txt  ql.txt  ql.txt.ori
[root@qulan test]# sed "/oldboy/d" ql.txt
I am ql student!
I study linux.

I like badminton ball ,billiard ball and chinese chess!
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!
:::
///
:d::f
[root@qulan test]# sed -i.bak "/oldboy/d" ql.txt
[root@qulan test]# ls

b.txt  ql.txt  ql.txt.bak  ql.txt.ori

使用vimdiff ql.txt ql.txt.bak查看文件差异

(6)将文件中的oldboy字符串全部替换为oldgril。

sed -i.bak 's#oldboy#oldgril#g' ql.txt

(7)在ql.txt文件的第2行追加文本。

sed -i '2a i am excellend.' ql.txt

(8)在2行插入,原来第2行移动到第3行

sed -i '2i i am is ql.' ql.txt

6、练习

(1)取/etc/passwd中的第5-15行,重定向到/test.txt

sed -n '5,15p' /etc/passwd >/test.txt

(2)把/test.txt中以/sbin/nologin结尾的,都修改为/bin/bash。

sed -i.bak 's#/sbin/nologin#/bin/bash#g' /test.txt 

(3)查找包含nobody的行。

sed -n '/nobody/p' /test.txt

(4)在第8行,插入#i am excellent。

sed -i.bak '8i i am excellent' /test.txt

(5)删除9-14行,并修改文件。

sed -i.bak '9,14d' /test.txt

(6)在ql.txt文件的第2行插入两行文本。

sed '2i iam qulan.\ni like dance' ql.txt

生产场景:

在文件中增加参数配置

远程连接ssh工具,需要一定配置

[root@qulan ~]# egrep '#Port|#PermitRootLogin|UseDNS|GSSAPIAuthentication' /etc/ssh/sshd_config 

  • #Port 22                                      #默认22端口(可以改)
  • #PermitRootLogin yes                #禁止root远程登录,改为no
  • GSSAPIAuthentication yes        #解决连接慢,改为no
  • #UseDNS yes                            #解决连接慢,改为no

二、应用案例取IP

问题1:取出Linux中执行ifconfig eth0后对应的IP地址(只能输出IP地址)

[root@qulan ~]# ifconfig eth0 |sed -n '2p'
        inet 10.0.0.135  netmask 255.255.255.0  broadcast 10.0.0.255

方法1:利用正则加sed替换功能取IP

        需要取出10.0.0.135

(1)取出IP前半部分(^.* inet)

[root@qulan ~]# ifconfig eth0 | sed -rn '2s#^.*inet ##gp'
10.0.0.135  netmask 255.255.255.0  broadcast 10.0.0.255

(2)取出IP后半部分(  netmask.*$)

[root@qulan ~]# ifconfig eth0 |sed -rn '2s#^.*inet ##gp'|sed -rn 's#  netmask.*$##gp'
10.0.0.135

练习:

1、取ip a结果中的第一块网卡ip

[root@qulan ~]# ip a |grep 'eth0$' |sed -rn 's#^.*inet ##gp' |sed -rn 's#/24.*$##gp'
10.0.0.135

[root@qulan ~]# ip a |sed -rn '9s#^.*inet ##gp' |sed -rn 's#/24.*$##gp'
10.0.0.135

用一个管道符(下面的后向引用):

[root@qulan ~]# ip a |sed -rn 's#^.*inet (.*)/24.*$#\1#gp'
10.0.0.135

2、取stat /etc/hosts中的数字权限644

[root@qulan ~]#  stat /etc/hosts
  文件:"/etc/hosts"
  大小:158           块:8          IO 块:4096   普通文件
设备:fd00h/64768d    Inode:16807249    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:net_conf_t:s0
最近访问:2024-06-03 15:56:02.220321274 +0800
最近更改:2013-06-07 22:31:32.000000000 +0800
最近改动:2024-03-17 15:00:23.400757219 +0800
创建时间:-

自己的方法:

[root@qulan ~]# stat /etc/hosts |sed -rn '4s#^.*\(0##gp'|sed -rn 's#/-rw.*$##gp'
644

[root@qulan ~]# stat /etc/hosts |grep '644' |sed -rn 's#^.*\(0##gp' |sed -rn 's#\/-rw.*$##gp'
644

用一条命令来实现取IP

后向引用:

想要的内容要用括号括起来匹配,因为好吧他拿出来。()\1

[root@qulan ~]# ifconfig eth0 |sed -rn 's#^.*inet (.*)  netmask.*$#\1#gp'
10.0.0.135

[root@qulan ~]# stat /etc/hosts |sed -rn 's#^.*\(0(.*)/-rw.*$#\1#gp'
644

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值