linux文本处置惩罚三剑客之sed

美食家大橙子  金牌会员 | 2024-6-25 00:17:11 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 680|帖子 680|积分 2040

sed

   本次分享重在让各人相识sed可以干哪些事变,以及日常我们可应用到什么地方;具体的命令掌握可课后自主学习;
  简介

sed全称为Stream EDitor,行编辑器,同时也是一种流编辑器。可以利用sed命令对文件进行增删改查操作。
sed 会根据脚本命令来处置惩罚文本文件中的数据,此命令执行数据的序次如下:

  • 每次仅读取文本的一行内容;
  • 根据提供的规则命令匹配并修改数据。留意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;
  • 将匹配修改后的执行效果输出。
当一行数据匹配完成后,它会继承读取下一行数据,并重复这个过程,直到将文件中所有数据处置惩罚完毕。

使用

基本格式

  1. # sed [option] [cmd] filename # sed -n '/error/p' service.log.fls
复制代码
option

常用的option及其含义:
option
含义
-n
默认情况下,sed会自动输出整个文本处置惩罚后的内容;而该option会屏蔽输出;
-i
此option会直接修改源文件,要慎用;
-e
追加命令,多个-e多条命令
-f

cmd

cmd基本格式:
# [n1[n2]] action
# n1,n2代表进行操作的行数,10,20代表在10,20行间执行命令;不指定n1,n2则默认作用于所有行;
常用的action及其含义:
action
含义
p
打印,通常会和-n一起运行,效果是只会输出匹配行
s

文本替换命令;
基本格式:s/pattern/replacement/flags
此命令中常用的 flags:
     

  • n:1~512 之间的数字,表示指定要替换的字符串出现第几次时才进行替换,例如,一行中有 3 个 A,但用户只想替换第二个 A,这是就用到这个标记;
  • g:对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。例如,一行数据中有 3 个 A,则只会替换第一个 A;
  • p:会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用;
  • w file:将缓冲区中的内容写到指定的 file 文件中;
  • &:用正则表达式匹配的内容进行替换;
a
在当前行下面插入文本

i
在当前行上面插入文本
d

删除选择的行

c
把选定的行改为新的文本
增删改查





  • 匹配关键词
  1. # 格式:sed -n '/字符串/p' 文件名
  2. sed -n '/aaa/p' service.log.fls
  3. sed -n '/aaa\|bbb/p' service.log.fls
复制代码


  • 打印行号
  1. # sed -n '/aaa/=' service.log.fls
  2. # sed -n -e '/aaa/p' -e '/aaa/=' service.log.fls
复制代码


  • 匹配某几行
  1. # 打印第2行到第5行 sed -n '2,5p' service.log.fls
  2. # 打印除2-5行外的内容 sed -n '2,5!p' service.log.fls
  3. # 打印第2行和第5行 sed -n '2p;5p' service.log.fls
  4. # 打印最后一行 sed -n '$p' service.log.fls
  5. # 打印匹配行以及后面2行 sed -n '/aaa/,+2p' service.log.fls
  6. # 打印匹配字符串行的下一行 sed -n '/aaa/{n;p}' service.log.fls
  7. # 从第2行开始每隔3行打印 # sed -n '2~3p' service.log.fls
复制代码


  • 匹配范围
  1. # 格式:sed -n '/start_pattern/,/end_pattern/p' 文件名
  2. # 过滤出2023-03-05T23:05:00到2023-03-05T23:06:00的日志 sed -n '/2023-03-05T23:05:00/,/2023-03-05T23:06:00/p' service.log.fls
  3. # 备注:start_pattern和end_pattern在文件中必须存在,否则匹配不生效,会输出整个文本;
复制代码


  1. 替换行内部分内容
  2. # 替换每行匹配到的第一个字符串
  3. sed -i 's/aaa/AAA/' service.log.fls
  4. # 全部替换每行匹配到的字符串
  5. sed -i 's/aaa/AAA/g' service.log.fls
  6. # 替换从第2行到最后一行匹配到的所有字符串
  7. sed -i '2,$s/aaa/AAA/g' service.log.fls
  8. # 替换第4行匹配到的字符
  9. sed -i '4s/aaa/AAA/' service.log.fls
  10. # 替换每行中匹配到的第3个字符串
  11. sed -i 's/aaa/AAA/3' service.log.fls
  12. # 将所有的doc都替换为docs,&代表查找串
  13. sed -i 's/doc/&s/g' service.log.fls
复制代码


  1. # 在第2行后面加一行"hello world"
  2. sed -i '2a hello world' service.log.fls
  3. # 在第2行前面加一行"hello world"
  4. sed -i '2i hello world' service.log.fls
复制代码


  1. # 删除文件包含bbb的行
  2. sed -i '/bbb/d' service.log.fls
  3. # 删除第1行和第2行
  4. sed -i '1,2d' service.log.fls
复制代码
附录

参考链接:
https://blog.csdn.net/m0_37814112/article/details/120171342
http://c.biancheng.net/view/4028.html

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表