Sed命令

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

你可能感兴趣的:(Sed命令)