Linux命令行——sed编辑器及正则表达式

我想请说下,Linux命令行——sed编辑器及正则表达式
最新回答
往事归零

2024-11-27 18:14:35

sed编辑器简介


sed编辑器,又称流编辑器,是一个“非交互式”的面向字符流的编辑器。它能够同时处理多个文件的多行内容,既可以直接修改文件内容,也可以不对原文件改动,将修改后的数据发送到STDOUT。


sed编辑器的选项包括:



  • -n:只打印模式匹配的行

  • -e:在命令行模式上进行sed动作编辑,为默认选项

  • -f:将sed的动作写在一个文件内,用–f filename执行filename内的sed动作

  • -r:支持扩展表达式

  • -i:直接修改文件内容


sed编辑器的编辑命令包括:



  • a:附加新行

  • i:插入新行

  • c:修改整行文本

  • d:删除文本行

  • p:打印行内容

  • s:替换文本模式

  • g:全局替换

  • y:字符转换

  • q:完成替换后退出

  • w:向文件写入行

  • r:从文件插入数据

  • =:打印行号

  • l:列出文本内容

  • {...};{...}:多命令分组执行


使用sed编辑器查询文本的方法有:



  • 以数字形式表示行区间

  • 使用文本模式过滤行,格式:/pattern/command

  • 使用正则表达式


正则表达式基础:



  • 特殊字符:.*[]^${}\+?|()

  • 锚字符:^匹配行首,$匹配行尾,^$匹配空白行

  • 点号字符:.匹配除换行符外的任意单个字符

  • 字符组:使用方括号定义,[]匹配指定范围内的任意单个字符,[^]匹配指定范围外的任意单个字符

  • 区间:匹配指定范围内的字符,使用方括号定义

  • 特殊字符组:[[:alpha:]]匹配字母,[[:alnum:]]匹配字母数字字符,[[:blank:]]匹配空格或制表符等

  • 星号字符:匹配字符出现0次或多次,用于匹配任意数量的任意字符


扩展正则表达式:



  • {}指定可重复的正则表达式上限

  • ?匹配前面字符0次或1次

  • +:匹配前面字符1次或多次

  • |逻辑OR方式指定多个模式


sed编辑器进阶:



  • 多行命令:N合并文本行,D删除多行组中的行,P打印多行组中的行

  • 分支:b [address]跳转到标签为 [label] 的行,若无label则跳转到脚本末尾

  • 模式替代:使用&符号代表模式匹配,圆括号定义子模式,特殊字符引用子模式位置


sed编辑器保持空间:



  • 模式空间用于保存待检查的文本

  • 保持空间用于临时保存部分行,使用h、H、g、G、x命令操作


使用示例:



  • 合并文本行:N命令将发现第一个单词的那行和下一行合并,便于查找多行文本

  • 多行删除命令:D删除模式空间中的第一行,结合N命令处理多行数据

  • 多行打印命令:P打印多行模式空间中的第一行,与单行p命令类似


总结:sed编辑器提供强大的文本处理功能,通过正则表达式、多行命令、分支等特性,可以实现复杂的数据过滤和文本替换操作。保持空间的使用更增加了灵活性,允许在文本处理过程中灵活移动和保存数据行。