什么是sed编辑器?
sed是一个命令行文本编辑工具,用于对文本进行处理和转换。它可以读取文本文件,对文件的各个行进行修改、删除和替换操作,并将结果输出到标准输出或者文件中。
sed 被广泛用于Unix和类Unix系统中的脚本和命令行操作中,它是一种非交互式的文本处理工具。sed使用基于正则表达式的模式匹配和替换来实现各种文本操作。它可以实现的功能包括:替换指定文本、插入和删除文本、根据条件进行行选择等。
sed具有简洁、高效和灵活的特点,可以批量处理大量的文本数据。由于其强大的文本处理能力,sed常被用于Shell脚本、文本转换、日志分析等场景中。
sed命令
u语法 sed [选项] [sed内置命令字符] [文件名]
示例:
used -n 'p' 文件路径
常用功能包括结合正则表达式对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)
选项:
-n | 取消默认输出格式,只打印处理过的行(通常搭配p使用) |
-i | 修改保存文件(默认为预览) |
-e | 同时执行多个过滤 |
-r | 扩展正则表达式 |
内置命令字符
a | 在指定行后添加一条数据或多行数据 |
d | 删除匹配的整行内容 |
i | 在指定行前添加一条数据或多行数据 |
p | 打印当前匹配的数据 |
c | 更改匹配行的内容 |
w | 筛选的内容保存到文件 |
r | 读取文件并追加 |
s | 将匹配的内容进行替换(支持正则表达式) |
范围
范围 | 解释 |
空地址 | 全文处理 |
单地址 | 指定文件某一行 |
范围地址 | 10,20 十到二十行,10,+5 第10行向下5行,/pattern1/,/pattern2/ |
/patter/ | 包含//中的内容的行 |
步长 | 1~2,标识1、3、5、7、9奇数行,2~2两个步长,标识2、4、6、8、10偶数行 |
示例
例1:展示文件中所有数据
sed -n p 文件名
例2:在第二行后添加一条数据
sed -i '2a 数据' 文件名
例3:把文件中的abc修改成张三
结尾如果是g代表全局匹配 结尾是i 代表忽略大小写 二者可同时写
sed s/abc/张三/g 文件名
但目前源文件并没有修改如果想要修改源文件需要在前面加-i
sed -i s/abc/张三/g 文件名
例4:删除所有行
sed -i 'd' 文件名
例5:替换行
c 替换指定行
示例: sed ‘2c abc’aaa
正则表达式
什么是正则表达式?
正则表达式是一种字符串匹配模式的描述方法,它可以用于搜索、替换和提取文本中符合某种模式的内容。在sed中,正则表达式可以用来描述需要匹配或操作的模式。
正则表达式 | 描述 |
^ | 匹配行的开始 |
$ | 匹配行的结尾 |
[] | 集合 |
[^] | 对集合取反 |
. | 匹配单个字符 |
* | 匹配以前一个字符任意次数 |
\{n,m\} | 匹配前一个字符n~m次 |
\{n\} | 匹配前后一个字符n次 |
\{n,\} | 匹配前一个字符n次以上 |
\(\) | 保留 |
正则示例
例1:匹配以数字开头的行:
sed -n '/^[0-9]/p' file.txt
例2:删除包含特定单词的行
sed '/word/d' file.txt
例3:使用正则表达式替换文件中满足特定模式的文本
sed '2s/lisi/wangyv/' file.txt
例4:取出linux的ip地址
ifconfig | sed -n '2s/^.*inet//gp' | sed -n 's/net.*$//gp'
2s : 处理第二行的内容
^.*inet 匹配inet之前所有的内容
g 全局匹配
p 打印替换结果
net.*$ 匹配net到结尾的内容
s/net.*$//gp 把匹配到的内容替换为空
正则拓展
注意:想要使用正则拓展必须加 -r
正则符号 | 描述 |
+ | 最少匹配一次 |
? | 最多匹配一次 |
{n,m} | 匹配n到m次 |
| | 或者 |
() | 组合为整体 |
示例
例:为文件中每个大写字母添加括号[]
sed -r 's/([a-z])/[\1]/g' file.txt
如有错误给孩子提醒一下,感谢观看!