《快学BigData》--Linux sed 详解(11)

2023-03-06 21:11:00 浏览数 (1)

Linux sed 详解

1-1)、参数详解

-n : 读取下一行到模式空间,安静的模式

-N : 追加下一行到模式空间

:a : 定义标签a

ba:返回标签a

ta :如果执行成功则返回标签a

Ta:如果执行不成功则返回a

-e : 直接在命令列模式上进行sed的动作操作

-f : 直接将sed的动作写在一个文件内

-i:直接修改读取文件中的内容,而不是输出到终端

p :列印,亦即将某个选择的数据印出

a :新增

c :取代

d :删除

i :插入

s :取代

1-2)、实例详解

准备数据

复制一份passwd数据到桌面

A)、复制数据的前一行

$ nl passwd |sed '1p'

1root:x:0:0:root:/root:/bin/bash

1root:x:0:0:root:/root:/bin/bash

2daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

××××××××××××××××××××××××

B)、删除制定的行

$ nl passwd |sed '1d'

2daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

3bin:x:2:2:bin:/bin:/usr/sbin/nologin

4sys:x:3:3:sys:/dev:/usr/sbin/nologin

××××××××××××××××××××××××

C)、显示第一行到第二行

$ nl passwd |sed -n '1,2p'

1root:x:0:0:root:/root:/bin/bash

2daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

只显示第三行

$ nl passwd | sed -n '3p'

3bin:x:2:2:bin:/bin:/usr/sbin/nologin

D)、在第二行后面添加一行信息

$ nl passwd |sed '2a add print .....'

1root:x:0:0:root:/root:/bin/bash

2daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

add print .....

3bin:x:2:2:bin:/bin:/usr/sbin/nologin

E)、删除地2行到第五行,病替换成相对应的字符

$ nl passwd |sed '2,5c add string .....'

1root:x:0:0:root:/root:/bin/bash

add string .....

6games:x:5:60:games:/usr/games:/usr/sbin/nologin

F)、搜索信息做操作

所有出来并显示

$ nl passwd |sed -n '/daemon/p'

2daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

29avahi-autoipd:x:110:115:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false

30usbmux:x:111:46:usbmux daemon,,,:/var/lib/usbmux:/bin/false

搜索出来直接删除

$ nl passwd |sed -n '/daemon/d'

搜索出来病执行替换,q只结束符

$ nl passwd |sed '/daemon/{s/daemon/blueshell/;q}'

1root:x:0:0:root:/root:/bin/bash

2blueshell:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

G)、获取本地的IP

$ ifconfig wlp3s0|sed -n '/netmask/p' | awk -F" " '{print $2}'

192.168.199.137

H)、把文件转换为unix编码

$ sudo sed -n 's/^M//' passwd

0 人点赞