sed 是 Linux三板斧之一,是一种非常强大的文本编辑器。它可以对文本文件进行添加、删除、替换、注释等操作。sed 的基本语法是:
代码语言:javascript复制sed option 'action' filename
这意味着对 filename 文件执行 action 所指定的编辑操作。例如,我们要在 /etc/passwd
文件中将“bash”替换为“zsh”,可以使用:
sed 's/bash/zsh/' /etc/passwd
这会输出 passwd 文件的内容,但是将每行中的“bash”替换为“zsh”。
sed的常用选项与动作
sed有许多选项与操作来控制编辑动作:
- -i: 直接修改文件内容,而不是输出到屏幕
- -n: 不输出未修改的行,只输出被sed修改过的行
- a: 在指定行的下一行添加一行或多行文本
- d: 删除指定行
- s: 查找并替换,类似于vi中的替换功能
- y: 将字符翻译成其他字符
- p: 打印指定行
- i: 在指定行前插入一行或多行文本
- c: 替换指定行
- g: 全局替换,即不止替换每一行的第一个模式匹配
- #注释
例如:
代码语言:javascript复制sed -i 's/bash/zsh/' /etc/passwd # 直接编辑/etc/passwd文件
sed -n 's/bash/zsh/p' /etc/passwd # 只输出替换过的行
sed '3ahello' /etc/passwd # 在第3行后添加"hello"
sed '3d' /etc/passwd # 删除第3行
sed 's/bash/zsh/' /etc/passwd # 将bash替换为zsh
sed 'y/abc/def/' /etc/passwd # 将a翻译成d,b翻译成e,c翻译成f
sed -n '10,20p' /etc/passwd # 只打印第10到20行
sed '2ihello' /etc/passwd # 在第二行前插入"hello"
sed '3chello' /etc/passwd # 将第三行替换为"hello"
sed 's/bash/zsh/g' /etc/passwd # 全局替换bash为zsh
sed '/^#/d' /etc/passwd # 删除所有注释行
sed 是一个功能强大的文本编辑器,熟练掌握各种选项与动作,几乎可以实现任何常见的文本编辑操作。结合正则表达式,sed 可以轻松编辑复杂的文本文件。sed 常用于批量修改文件内容、过滤与格式化文本等。使用 sed 编辑过的文件,内容和格式看上去就像手工编辑过的一样,这使得 sed 成为自动化文本处理不可多得的工具。
总之,sed 是 Linux 环境下必不可少的命令之一。掌握 sed 可以极大提高工作效率,并使许多日常的文本编辑工作自动化。