sed命令详解
基本概念
sed(Stream EDitor) 是一个强大的流编辑器,用于对输入流(文件或管道)进行基本的文本转换。它逐行处理文本,执行用户指定的编辑命令,然后将结果输出到标准输出。
基本语法
1sed [选项] '命令' 输入文件
常用选项
-n:禁止默认输出,只打印经过处理的行-e:允许多个编辑命令-f:从指定文件中读取编辑命令-i:直接修改文件内容(慎用)-r:使用扩展正则表达式(某些版本使用-E)
基本命令
-
替换命令 (s)
1sed 's/原字符串/新字符串/' 文件示例:将文件中所有"apple"替换为"orange"
1sed 's/apple/orange/g' fruits.txtg表示全局替换(每行所有匹配)- 可以指定替换第N个匹配:
sed 's/apple/orange/2'只替换每行第二个匹配
-
删除命令 (d)
1sed 'Nd' 文件 # 删除第N行 2sed '/pattern/d' 文件 # 删除匹配pattern的行 -
打印命令 (p)
1sed -n 'Np' 文件 # 打印第N行 2sed -n '/pattern/p' 文件 # 打印匹配pattern的行 -
插入/追加命令 (i/a)
1sed 'Ni\插入内容' 文件 # 在第N行前插入 2sed 'Na\追加内容' 文件 # 在第N行后追加
高级用法
-
多命令执行
1sed -e 's/apple/orange/' -e 's/banana/grape/' fruits.txt或者:
1sed 's/apple/orange/; s/banana/grape/' fruits.txt -
地址范围
1sed '10,20d' file # 删除10-20行 2sed '/start/,/end/d' file # 删除从匹配"start"到匹配"end"之间的行 -
保持空间操作
h:将模式空间内容复制到保持空间H:将模式空间内容追加到保持空间g:将保持空间内容复制到模式空间G:将保持空间内容追加到模式空间x:交换模式空间和保持空间内容
-
分支命令 (b)
1sed ':label; command; b label' # 创建循环
实际应用示例
-
删除空白行
1sed '/^$/d' file.txt -
在文件开头插入内容
1sed '1i\插入的内容' file.txt -
批量重命名文件
1ls *.txt | sed 's/\(.*\)\.txt/mv & \1.doc/' | sh -
提取日志中的特定时间段记录
1sed -n '/2023-05-01 10:00:00/,/2023-05-01 11:00:00/p' app.log
注意事项
sed 是Unix/Linux系统中非常强大的文本处理工具,熟练掌握它可以大大提高文本处理的效率。