sed: stream editor (行编辑器)
默认不编辑原文件,仅对模式处理
sed 'Addresscommand' file ....
指定Address
1.开头,结束 (1,100)
$:最后一行
$-1:倒数第二行
2.正则表达指定模式 (/^root/)
3.模式1,模式2 (/pattern1/, /pattern2/) 从模式1开始到模式2中间所有的行
4.Line number(精确行 )
5.Startline, +N 从startline开始,向后N行
命令:
d
删除
p
显示符合条件的行
a \
在匹配的行后面加自己显示的内容
i \
在匹配的行前面加自己显示的内容
如:
$ cat 11_1.sh
#!/bin/bash
#
file=/etc/
if [ ! -e $file ]; then
echo "no $file"
exit 1
fi
if [ -f $file ]; then
echo "$file is a common file."
elif [ -d $file ];then
echo "$file is a dir."
else
echo "unknown file."
fi
$ sed '1,2d' 11_1.sh #d 删除
file=/etc/
if [ ! -e $file ]; then
echo "no $file"
exit 1
fi
if [ -f $file ]; then
echo "$file is a common file."
elif [ -d $file ];then
echo "$file is a dir."
else
echo "unknown file."
fi
包含if就全部删了 / /
斜线:模式匹配
$ sed '/if/d' 11_1.sh
#!/bin/bash
#
file=/etc/
echo "no $file"
exit 1
fi
echo "$file is a common file."
echo "$file is a dir."
else
echo "unknown file."
fi
相对行删除,删除第1行开始向后2行(前三行)
$ sed '1,+2d' 11_1.sh
if [ ! -e $file ]; then
echo "no $file"
exit 1
fi
if [ -f $file ]; then
echo "$file is a common file."
elif [ -d $file ];then
echo "$file is a dir."
else
echo "unknown file."
fi
只除第一行 sed 1d 11_1.sh
p
显示 显示以/
开头的,匹配自身需要在/
前面加一个反斜线\
$ sed '/^\//p' /etc/fstab
/dev/vda1 / ext3 noatime,acl,user_xattr 1 1
/dev/vda1 / ext3 noatime,acl,user_xattr 1 1
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
debugfs /sys/kernel/debug debugfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
/dev/vdb1 /public ext3 defaults 0 0
/dev/vdb1 /public ext3 defaults 0 0
/dev/vdc /home ext3 defaults 0 0
/dev/vdc /home ext3 defaults 0 0
#/dev/vdf /trainee ext3 defaults 0 0
/mnt/10GiB.swap swap swap defaults 0 0
/mnt/10GiB.swap swap swap defaults 0 0
可以看到符合命令的显示了2次
可以使用-n
不再显示模式空间内容,只显示符合条件的行
$ sed -n '/^\//p' /etc/fstab
/dev/vda1 / ext3 noatime,acl,user_xattr 1 1
/dev/vdb1 /public ext3 defaults 0 0
/dev/vdc /home ext3 defaults 0 0
/mnt/10GiB.swap swap swap defaults 0 0
a \
在匹配的行后面加自己显示的内容
$ sed '/^\//a \ hello world' /etc/fstab
/dev/vda1 / ext3 noatime,acl,user_xattr 1 1
hello world
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
debugfs /sys/kernel/debug debugfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
/dev/vdb1 /public ext3 defaults 0 0
hello world
/dev/vdc /home ext3 defaults 0 0
hello world
#/dev/vdf /trainee ext3 defaults 0 0
/mnt/10GiB.swap swap swap defaults 0 0
hello world
$ sed '/^\//a \hello world\nhello' /etc/fstab #\n换行
/dev/vda1 / ext3 noatime,acl,user_xattr 1 1
hello world
hello
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
debugfs /sys/kernel/debug debugfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
/dev/vdb1 /public ext3 defaults 0 0
hello world
hello
/dev/vdc /home ext3 defaults 0 0
hello world
hello
#/dev/vdf /trainee ext3 defaults 0 0
/mnt/10GiB.swap swap swap defaults 0 0
hello world
hello
i \
在匹配的行前面加自己显示的内容
$ sed '/^\//i \hello world' /etc/fstab
hello world
/dev/vda1 / ext3 noatime,acl,user_xattr 1 1
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
debugfs /sys/kernel/debug debugfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
友情阅读推荐:
生信技能树公益视频合辑:学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!
B站链接:https://m.bilibili.com/space/338686099
YouTube链接:https://m.youtube.com/channel/UC67sImqK7V8tSWHMG8azIVA/playlists
生信工程师入门最佳指南:https://mp.weixin.qq.com/s/vaX4ttaLIa19MefD86WfUA
学徒培养:https://mp.weixin.qq.com/s/3jw3_PgZXYd7FomxEMxFmw