sed的基本语法是:

sed [options] 'command' file

其中,options是一些可选的参数,如:

  • -e 表示直接在命令行模式上进行sed动作编辑,这是默认选项;
  • -f 表示将sed的动作写在一个文件内,用-f filename执行文件内的sed动作;
  • -i 表示直接修改文件内容;
  • -n 表示只打印模式匹配的行;
  • -r 表示支持扩展表达式;
  • -h--help 表示显示帮助;
  • -V--version 表示显示版本信息。

command是一些sed的命令,如:

  • a\ 表示在当前行下面插入文本;
  • i\ 表示在当前行上面插入文本;
  • c\ 表示把选定的行改为新的文本;
  • d 表示删除选择的行;
  • s 表示替换指定字符;
  • p 表示打印模板块的行;
  • q 表示退出sed;
  • = 表示打印当前行号;
  • # 表示注释。

file是指定待处理的文本文件。

sed还支持一些替换标记和元字符集,用于进行更复杂的文本处理。具体的用法和示例,您可以参考以下的链接:

# 1. 显示文件的部分文本,如显示第3行到第9行
sed -n '3,9p' file.txt

# 2. 显示除某些行之外的所有行,如显示除第22行到第29行之外的所有行
sed '22,29d' file.txt

# 3. 显示从第n行开始的每m行,如显示从第2行开始的每3行
sed -n '2~3p' file.txt

# 4. 删除一行,如删除第10行
sed '10d' file.txt

# 5. 删除一系列行,如删除第29行到第34行
sed '29,34d' file.txt

# 6. 删除范围以外的行,如删除第29行到第34行以外的行
sed '29,34!d' file.txt

# 7. 添加空白行或空格,如在每个非空行之后添加一个空行
sed G file.txt

# 8. 查找和替换(首次替换),如将所有的danger替换为safety,或者只替换第n次出现的字符串
sed 's/danger/safety/' file.txt # 首次替换
sed 's/danger/safety/2' file.txt # 替换第2次出现的字符串

# 9. 查找和替换(全局替换),如将所有的danger替换为safety,或者只替换第n次出现的字符串
sed 's/danger/safety/g' file.txt # 全局替换
sed 's/danger/safety/2g' file.txt # 替换第2次及以后出现的字符串

# 10. 替换特定行上的字符串,如只替换第4行的danger为safety,或者替换第4行到第9行的danger为safety
sed '4s/danger/safety/' file.txt # 替换第4行
sed '4,9s/danger/safety/' file.txt # 替换第4行到第9行

# 11. 在匹配搜索之后或之前添加一行,如在匹配到danger的行后添加"This is a new line",或者在匹配到danger的行前添加"This is a new line"
sed '/danger/a "This is a new line"' file.txt # 在匹配到的行后添加
sed '/danger/i "This is a new line"' file.txt # 在匹配到的行前添加

# 12. 用匹配的模式更改整行,如将匹配到danger的行全部替换为"This is a new line"
sed '/danger/c "This is a new line"' file.txt

# 13. 运行多个sed命令,如将所有的danger替换为safety,然后将所有的hate替换为love
sed -e 's/danger/safety/g' -e 's/hate/love/g' file.txt

# 14. 在编辑文件之前进行备份,如在替换所有的danger为safety之前,创建一个文件的备份副本,扩展名为.bak
sed -i.bak 's/danger/safety/g' file.txt

# 15. 删除以模式开头和结尾的文件行,如删除以#开头并以.结尾的行
sed '/^#.*\.$/d' file.txt

# 16. 附加行,如在每行之前添加"test",或者在每行之后添加"test"
sed 's/.*/test &/' file.txt # 在每行之前添加
sed 's/.*/& test/' file.txt # 在每行之后添加

# 17. 删除所有注释行和空行,如删除以#开头的注释行,或者删除空白行
sed -e 's/#.*//' -e '/^$/d' file.txt # 删除注释行和空行
sed 's/#.*//' file.txt # 只删除注释行

# 18. 从文件中提取或格式化文本,如从/etc/passwd文件中获取所有用户名,或者删除括号以及括号里面的内容
sed 's/\(.*\):.*/\1/' /etc/passwd # 获取所有用户名
sed 's/(.*)//' file.txt # 删除括号及其内容

# 19. 对文件进行备份或修改,如在编辑文件之前创建文件的备份副本,或者直接修改文件内容而不是输出到终端
sed -i.bak 's/danger/safety/g' file.txt # 创建备份副本并修改文件
sed -i 's/danger/safety/g' file.txt # 直接修改文件

# 20. 防止覆盖系统链接,如使用-i选项时,避免破坏链接文件,而是使用--follow-symlinks选项
sed -i --follow-symlinks 's/danger/safety/g' file.txt