sed用法总结及演示

sed行编辑器被称为三剑客之一,英文全称(Stream EDitor)相对grep匹配功能而言,sed能将匹配到的内容进行行编辑。
用法:
sed [option]... 'script' inputfile...
'script'表示编“辑命令+地址定界”

 

常用选项:
-n:不输出模式空间中的内容至屏幕;
-e script, --expression=script:多点编辑;
-f /PATH/TO/SED_SCRIPT_FILE 文本中每行一个编辑命令;
-r, --regexp-extended:支持使用扩展正则表达式;
-i[SUFFIX], --in-place[=SUFFIX]:直接编辑原文件 ;不建议

编辑命令:一般使用单引号:‘’
d:删除;
p:显示模式空间中的内容;
a \text:在行后面追加文本“text”,支持使用\n实现多行追加;
i \text:在行前面插入文本“text”,支持使用\n实现多行插入;
c \text:把匹配到的行替换为此处指定的文本“text”;
w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;
r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并;
=:为模式匹配到的行打印行号;
!:条件取反;
地址定界!编辑命令;
s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等;
替换标记:
g:全局替换;
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
p:显示替换成功的行;

 

例:

option:
-n: 取消默认打印内容到屏幕;
~]# sed -n '1,3p' /etc/passwd

-e :多点编辑,表示且关系,与grep不同的是grep -e表示或关系;
~]# sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab

-f:从指定文件中读取编辑脚本;

首先将命令写入一个脚本中
]# echo "1,3p" > sed_sh.txt
]# sed -n -f sed_sh.txt /etc/passwd

-r: 支持使用扩展的表达式;

~]# echo "/var/log/messages" | sed -r 's@[^/]+/?$@@'


-i.bak 原处编辑,并备份文件file.bak

危险动作

备份功能:~]# sed -i.bak -n '1,+2a@' passwd.bak.

 

地址界定:

(1)、不给定地址则对全文处理;

(2)、单地址:

#:指定的行;

 ~]# sed -n '2p' passwd

$:最后一行;

~]# sed -n '$p' passwd

/pattern/:支持正则表达式,被模式匹配到的所有行

~]# sed -n '/^ss.*/p' passwd

(3)、地址范围:

#,#  从当前#行到#行

 ~]# sed -n '2,5p' /etc/passwd

#,+#  从#后加#行

]# sed -n '2,+5p' /etc/passwd 第二行行后面加五行

/pat1/,/pat2/  从pat1模式匹配到的行至pat2匹配到的行

~]# sed -n '/^sshd/,/^apache/p' /etc/passwd 

  /pat1/,#  从pat1

 ~]# ifconfig | sed -n "/^ens33/,3p"

 

(4)、~:步进  第一个数为起始行后一个数字为前进步数

1~2:奇数行 

 ~]# cat /etc/passwd | sed -n "1~2p"

  2~2:偶数行

 ~]# cat /etc/passwd | sed -n "2~2p"

 

编辑命令演示

d:删除;

~]# sed '3d' passwd
p:显示模式空间中的内容;
a \text:在行后面追加文本“text”,支持使用\n实现多行追加;

  ~]# sed '1~2a\#' passwd

i \text:在行前面插入文本“text”,支持使用\n实现多行插入;

~]# sed '1~2i\#' passwd

 

c \text:把匹配到的行替换为此处指定的文本“text”;

 ~]# sed '1~2c\#' passwd 

w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;

~]# sed -n '/^apache/w /tmp/sed.txt' passwd 

~]# cat -n /tmp/sed.txt 

r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;实现文件合并;

~]# sed  '/^root/r /tmp/sed.txt' passwd

=:为模式匹配到的行打印行号;

!:条件取反;

~]# sed -n '1,5! p' passwd

s/ 要替换的字符/替换成的字符/标记:查找替换,其分隔符可自行指定,常用的有s@@@, s###;

替换标记:
g:全局替换;
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
p:显示替换成功的行;

1、删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符;
~]# sed 's@^[[:space:]]\+@@' /etc/grub2.cfg
2、删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符;
~]# sed 's@^#[[:space:]]*@@' /etc/fstab
3、输出一个绝对路径给sed命令,取出其目录,其行为类似于dirname;
~]# echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@'
~]# echo "/var/log/messages" | sed -r 's@[^/]+/?$@@'

 

演示:

用bash实现统计访问日志文件中状态码大于等于400的IP数量并排序
~]# sed -n -r '/\<40[0-9]\>/p' /var/log/httpd/access_log | cut -d" " -f1 | sort | uniq -c

转载于:https://www.cnblogs.com/datieli/p/10562562.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值