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系统中zhangsan、lisi、wangwu用户是否存在,如果存在则返回“对应的用户已存在”,例如zhangsan用户存在则返回“zhangsan已存在”;反之新建该用户并设置初始密码为123456。