【Linux】sed 命令详解及使用样例:流式文本编辑器
【Linux】sed 命令详解及使用样例:流式文本编辑器
引言
sed
是 Linux/Unix 系统中一个强大的流式文本编辑器,名称来源于 “Stream EDitor”(流编辑器)。它允许用户在不打开文件的情况下对文本进行筛选和转换,是命令行环境下处理文本的重要工具。
基本功能
- 文本替换:查找并替换文本中的字符串
- 选择性处理:对匹配特定模式的行进行操作
- 文本删除:删除匹配特定模式的行
- 文本插入:在指定位置插入文本
- 行处理:按行号或范围处理文本
常用选项
-n
:禁止自动打印模式空间内容,需要使用p
命令手动打印-e
:允许在同一行中执行多个编辑命令-i
:直接修改原文件而不是输出到标准输出-r
或-E
:使用扩展正则表达式-f
:从文件中读取编辑命令
常用命令
s/pattern/replacement/flags
:替换匹配的文本- 常用标志(flags):
g
(全局)、i
(忽略大小写)、n
(第n次出现)
- 常用标志(flags):
p
:打印匹配行d
:删除匹配行a\
:在匹配行后追加文本i\
:在匹配行前插入文本c\
:替换匹配行y/源字符集/目标字符集/
:字符转换
地址匹配
n
:指定行号n,m
:指定行号范围/pattern/
:匹配正则表达式的行addr1,+n
:从addr1开始的n行addr1,~n
:从addr1开始,到下一个n的倍数行
使用示例
- 利用sed命令选择并显示/etc/passwd中的最后一行
sed -n '$p' /etc/passwd
- 利用sed命令选择并显示/etc/passwd中有root的行
sed -n '/root/p' /etc/passwd
- 利用sed命令选择并显示/etc/passwd中以mail为开头的行
sed -n '/^mail/p' /etc/passwd
- 利用sed命令将/etc/passwd中所有:替换为–
sed 's/:/-/g' /etc/passwd
- 利用sed命令删除/etc/passwd中所有以首字母a到s开头的行
sed '/^[a-s]/d' /etc/passwd
- 利用sed命令删除/etc/passwd中所有含有大写字母的行
sed '/[A-Z]/d' /etc/passwd
- 结合sed命令列出/etc目录下目录文件的个数
ls -l /etc | sed -n '/^d/p' | wc -l
- 结合sed命令查看用户为root的进程信息
ps aux | sed -n '/^root/p'
- 结合sed命令查看用户为root的进程信息,将用户root信息改为大写ROOT
ps aux | sed -n '/^root/p' | sed 's/^root/ROOT/'
- 利用sed命令将etc下目录文件中详细信息内容中的数字改为*号
ls -l /etc | sed 's/[0-9]/*/g'
参考资料
- https://www.runoob.com/linux/linux-comm-sed.html