文本三剑客之一sed

sed编辑器:

文本三剑客:sed :行编辑器,也按行来编辑,是一种流编辑器

确认修改才会修改 每次处理内容,只有确认才会生效,不确认的,只是把模式空间的临时数据展示给用户,然后删除,按照文本的行,一行一行的向下处理,直到文件的最后一行

默认情况下:sed都是在模式空间执行,因此元文件不会发生变化,

sed的操作格式:

sed -e “操作” 文件1 文件2

sed -e “操作1;操作2” 文件

sed -e 指定的命令来处理输入的文本文件,只有一个操作,- e 可以省略,多个指令才会用-e
-f通过文件改文件夹。
总结: sed可以增删改查
sed也可以结合正则表达式
但是sed的最主要作用:改 增
使用sed命令时,注意,大文件-定要分割之后再交给sed处理
使用sed i立即神效,要注意,事先做好测试,还要做好备份。
 

f:用特定的脚本文件来处理输入的文件。

-n:仅显示script处理后的结果

sed -i立即生效慎用

sed的操作符

p 打印

打印:

sed -e ‘p’

sed自己还有一个默认输出的,再加上P打印,就有2行

-n  就是禁止了默认输出

Sed -n ‘2p’   输出指定的行内容

sed -n ‘=’  只显示行号

Sed -n ‘$p’ 打印最后一行

第一行到第三行

第2行到第三行

第一行和第五行

第二行和第三行

第一行 和最后一行

sed -n ‘n;p’ test.txt

n在p的前面,跳过当前一行,打印下一行

p在前面,打印当前一行,跳下一行继续打印

文本内容过滤  --sed

sed -n ’//p’ 

所有包含o 的行

打印以root为开头的

 打印bash 为结尾的

第4行到bash为结尾的

sed 使用扩展正则表达式:

sed -r   {n} {m}

打印包含99:的行  

{2}最多2行

打印以root为开头,或者以bash 为结尾的的行

面试题:

sed删除文件内容:

现在有一个文件,文件名我想保留,但是原有的内容我要删除掉面交互删除,如下两种方式

cat /dev/null > test.txt   把黑洞文件塞进去

sed -i ‘d’ test.txt    d 是删除 -i 立即生效

删除:

“d” : 删除,操作符,删除的意思删除的是行

sed -n ‘3d;p’ test.txt   删除第三行

sed -n “2,6d;p” test.sh  删除第二行到6行

sed -n ‘5,$d;p’ test.txt   删除第5行到最后一行

sed -n ‘1,4!d;p’ test.txt  删除1-4行之外的取反()

sed ‘/o/d’ test.txt 删除包含o的行

sed ‘/one/,/six/!d’ test.txt  除了1到6都删除

删除空行

删除过滤出非空行:

sed '/^$/d' test.txt

grep -v '^$' test.txt

sed 修改,

操作符:

s 替换字符串

c 整行替换

y 单字符替换,替换前后字符长度要保持一致

这里的p表示要替换的 1p 表示要替换第一个出现的,2p表示替换第二个出现的

一行只有1个root的不替换

加g表示全部替换

把root开头的,替换成#

sed -n '/^root/ s/^/#/p' /etc/passwd

特殊符号:
I&:转换成小写的特殊符号,在前面加上转义符\
u&:转换成大写的特殊符号,在前面加上转义符\|
大写换小写
小写换大写


大写换小写

换成大写全部  g

把第一行换成22

面试题:整行替换IPADDR c最好空开

[root@test1 opt]# cat ifcfg-ens33 | sed '/IPADDR/c IPADDR=1.1.1.1'

TYPE=Ethernet

DEVICE=ens33

ONBOOT=yes

BOOTPROTO=static

IPADDR=1.1.1.1

NETMASK=255.255.255.0

GATEWAY=192.168.233.2

DNS1=218.2.135.1

单字符替换:y

on 替换成34

sed新增命令:

 a: 在匹配行的下一行添加内容

i: 在匹配行的上一行添加内容

r: 可以从其他文件读取内容,然后在匹配行的行后添加

下一行添加韩文升

上一行添加韩文升

six行后添加读取的内容 路径文件等都行

$a 在文本的最后一行添加

$i 在文本的倒数第二行添加

sed中 字符串与字符串之间的交换

扩展正则和分组   -r

前面的位置默认排序123

分组交换

删掉

倒序

面试会问:如何通过文件改文件夹 -f

面试会问实验:如何提取版本号

ant-1.9.7.jar

ant-launcher-1.9.7.jar

antlr-2.7.7.jar

antlr-runtime-3.4.jar

aopalliance-1.0.jar

archaius-core-0.7.6.jar

asm-5.0.4.jar

aspectjweaver-1.9.5.jar

bcpkix-jdk15on-1.64.jar

bcprov-jdk15-1.46.jar

bcprov-jdk15on-1.64.jar

checker-compat-qual-2.5.5.jar

实验1:批量改文件的后缀名

  当前文件夹下有统一格式的文件30个 格式如下:

  姓名_学号_班级.jpg

  张三_01_03.jpg

  现在要求改成

    学号_姓名.jpg

    01_张三.jpg

sed -r切片提取出来 

实验2:提取文件中的主机名

提取host.txt文件中的主机名后再放回host.txt文件  

1 www.kgc.com

2 mail.kgc.com

3 ftp.kgc.com

4 linux.kgc.com

5 blog.kgc.com

实验3:判断用户是否存在并创建用户密码

判断linux系统中zhangsanlisiwangwu用户是否存在,如果存在则返回对应的用户已存在,例如zhangsan用户存在则返回zhangsan已存在;反之新建该用户并设置初始密码为123456

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值