三剑客之SED
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三剑客之SED相关的知识,希望对你有一定的参考价值。
1.功能说明Sed是Stream Editor(流编辑器)缩写,是操作、过滤和转换文本内容的强大工具。常用功能有增删改查,过滤,取行。
[root@gumt ~]#sed --version
sed (GNU sed) 4.2.2
2.语法格式
SYNOPSIS
sed [OPTION]... script-only-if-no-other-script [input-file]...
说明:
(1)注意sed和后面的选项之间至少有一个空格。
(2)为了避免混淆,本文称呼sed为sed软件。sed-commands(sed命令)是sed软件内置的一些命令选项,为了和前面的options(选项)区分,故称为sed命令。
(3)sed-commands既可以是单个sed命令,也可以是多个sed命令组合。
(4)input-file(输入文件)是可选项,sed还能够从标准输入如管道获取输入。
常用选项-[OPTION]:
-n:不输出模式空间中的内容至屏幕;
-e script, --expression=script:多点编辑
[root@gumt ~]#sed -e ‘s@^#[[:space:]]*@@‘ -e ‘/^UUID/d‘ /etc/fstab
/etc/fstab
Created by anaconda on Mon Mar 11 20:02:33 2019
Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos_gumt-root / xfs defaults 0 0
/dev/mapper/centos_gumt-home /home xfs defaults 0 0
/dev/mapper/centos_gumt-swap swap swap defaults 0 0
-f /PATH/TO/SED_SCRIPT_FILE:每一行一个编辑命令
-r, --regexp-extended:支持使用正则表达式
-i[SUFFIX], --in-place[=SUFFIX]:直接编辑源文件
地址定界:
(1)空地址:对全文进行处理
(2)单地址:
#:指定行
/pattern/:被此模式所匹配到的每一行
(3)地址范围
#,#:
#,+#:
#,/part1/
$:最后一行
(4)步进:~
1~2:所有奇数行
2~2:所有偶数行
编辑命令:
d:删除
[root@gumt ~]#sed ‘11,12d‘ /etc/fstab
#/etc/fstab
#Created by anaconda on Mon Mar 11 20:02:33 2019
#Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos_gumt-root / xfs defaults 0 0
UUID=7f9112ef-49d5-44b9-ab48-f78c34d70ee0 /boot xfs defaults 0 0
p:显示模式空间中的内容
[root@gumt ~]#sed ‘11,12p‘ /etc/fstab
#/etc/fstab
#Created by anaconda on Mon Mar 11 20:02:33 2019
#Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos_gumt-root / xfs defaults 0 0
UUID=7f9112ef-49d5-44b9-ab48-f78c34d70ee0 /boot xfs defaults 0 0
*/dev/mapper/centosgumt-home /home xfs defaults 0 0
/dev/mapper/centosgumt-home /home xfs defaults 0 0
/dev/mapper/centosgumt-swap swap swap defaults 0 0
/dev/mapper/centosgumt-swap swap swap defaults 0 0
a \text:在行后面追加文本“text”,支持使用\n实现多行追加
[root@gumt ~]#sed ‘3a \new line‘ /etc/fstab
#/etc/fstab
** new line**
#Created by anaconda on Mon Mar 11 20:02:33 2019
#Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos_gumt-root / xfs defaults 0 0
UUID=7f9112ef-49d5-44b9-ab48-f78c34d70ee0 /boot xfs defaults 0 0
/dev/mapper/centos_gumt-home /home xfs defaults 0 0
/dev/mapper/centos_gumt-swap swap swap defaults 0 0
l \text:在行前面追加文本“text”,支持使用\n实现多行插入
c \text:把匹配的行替换为此处指定的文本“text”
w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中
[root@gumt ~]#sed ‘/^[^#]/w /tmp/fstab.bak‘ /etc/fstab
#/etc/fstab
#Created by anaconda on Mon Mar 11 20:02:33 2019
#Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos_gumt-root / xfs defaults 0 0
UUID=7f9112ef-49d5-44b9-ab48-f78c34d70ee0 /boot xfs defaults 0 0
/dev/mapper/centos_gumt-home /home xfs defaults 0 0
/dev/mapper/centos_gumt-swap swap swap defaults 0 0
[root@gumt ~]#cat /tmp/fstab.bak
/dev/mapper/centos_gumt-root / xfs defaults 0 0
UUID=7f9112ef-49d5-44b9-ab48-f78c34d70ee0 /boot xfs defaults 0 0
/dev/mapper/centos_gumt-home /home xfs defaults 0 0
/dev/mapper/centos_gumt-swap swap swap defaults 0 0
r /PATH/TO/SOMEFILE:读取指定文件的内容至当前文件被莫忽视匹配到的行后面;文件合并
[root@gumt ~]#sed ‘3r /etc/issue‘ /etc/fstab
#/etc/fstab
\S
Kernel \r on an \m
#Created by anaconda on Mon Mar 11 20:02:33 2019
#Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos_gumt-root / xfs defaults 0 0
UUID=7f9112ef-49d5-44b9-ab48-f78c34d70ee0 /boot xfs defaults 0 0
/dev/mapper/centos_gumt-home /home xfs defaults 0 0
/dev/mapper/centos_gumt-swap swap swap defaults 0 0
= :为模式空间匹配到的行打印行号
!:条件取反;
地址定界!编辑命令
[root@gumt ~]#sed ‘/^#/!d‘ /etc/fstab
#/etc/fstab
#Created by anaconda on Mon Mar 11 20:02:33 2019
#Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
s///:查找替换,其分割符课可自行指定
替换标记:
g:全局替换
w:/PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中
p:显示替换成功的行
3.示例
输出长度不小于50个字符的行
sed -n ‘/^.50/p‘
统计文件中有每个单词出现了多少次
sed ‘s/ /\n/g‘ file | sort | uniq -c
查找目录中的py文件,删掉所有行级注释
find ./ -name "*.py" | xargs sed -i.bak ‘/^[ ]*#/d‘
查看第5-7行和10-13行
sed -n -e ‘5,7p‘ -e ‘10,13p‘ file
仅输出ip地址
ip route show | sed -n ‘/src/p‘ | sed -e ‘s/ */ /g‘ | cut -d‘ ‘ -f9
以上是关于三剑客之SED的主要内容,如果未能解决你的问题,请参考以下文章