sed 是 Linux 中的一个流编辑器(stream editor),主要用于处理文本的编辑和转换。它可以从文件或标准输入读取内容,然后根据指定的模式和指令对数据进行处理,最后输出修改后的结果。它的强大之处在于可以通过脚本或命令行进行非交互式的文本处理。
sed 的基本语法
sed [选项] '脚本' 文件 
- 脚本:描述如何编辑文本的操作。
- 文件:需要处理的文本文件。
- 选项:控制- sed的行为,常用选项如下。
常用选项
- -e:允许使用多个编辑脚本。
- -i:直接修改文件(原地编辑)。
- -n:静默模式,不会自动打印输出,通常与- p命令结合使用。
- -r:使用扩展正则表达式。
- -f:从脚本文件读取- sed命令。
常见命令
- p:打印匹配的行。
- d:删除匹配的行。
- s:替换模式(substitute)。
- a:在当前行之后追加文本。
- i:在当前行之前插入文本。
- c:用新的文本替换整行。
示例详解
1. 基本替换
            
            
              bash
              
              
            
          
          sed 's/old/new/' file.txt- s/old/new/:将每行中第一个匹配- old的字符串替换为- new。
- 如果需要替换每行中所有匹配的字符串,可以使用 g选项:
            
            
              bash
              
              
            
          
          sed 's/old/new/g' file.txt2. 只修改特定行
            
            
              bash
              
              
            
          
          sed '2s/old/new/' file.txt- 只对文件的第二行进行替换操作。
3. 删除行
            
            
              bash
              
              
            
          
          sed '2d' file.txt- 删除第二行。
            
            
              bash
              
              
            
          
          sed '2,5d' file.txt- 删除第 2 到第 5 行。
4. 插入和追加
            
            
              bash
              
              
            
          
          sed '2a\This is new line' file.txt- 在第二行后插入文本 This is new line。
            
            
              bash
              
              
            
          
          sed '2i\This is new line' file.txt- 在第二行前插入文本 This is new line。
5. 多脚本处理
使用 -e 选项可以进行多个命令的组合:
            
            
              bash
              
              
            
          
          sed -e 's/old/new/' -e '2d' file.txt- 首先将所有 old替换为new,然后删除第二行。
6. 扩展正则表达式
默认情况下,sed 使用基本正则表达式。要使用扩展正则表达式,可以加上 -r 选项:
            
            
              bash
              
              
            
          
          sed -r 's/(foo|bar)/new/' file.txt- 将 foo或bar替换为new。
7. 原地修改文件
            
            
              bash
              
              
            
          
          sed -i 's/old/new/g' file.txt- 直接修改 file.txt,不再输出到标准输出。
8. 打印匹配行
结合 -n 和 p 命令,只输出匹配的行:
            
            
              bash
              
              
            
          
          sed -n '/pattern/p' file.txt- 只打印匹配 pattern的行。
高级用法
1. 使用 & 引用匹配部分
在替换操作中,& 代表匹配的部分:
            
            
              bash
              
              
            
          
          sed 's/[0-9]\+/[&]/g' file.txt- 将文件中所有的数字用方括号包裹起来。
2. 使用标记捕获组
            
            
              bash
              
              
            
          
          sed 's/\(old\)/new\1/' file.txt- 将匹配的 old替换为newold,\1表示引用第一个捕获组。
3. 替换多行文本
            
            
              bash
              
              
            
          
          sed ':a;N;$!ba;s/\n/ /g' file.txt- 将整个文件的所有换行符替换为空格,从而将整个文件内容变成一行。
总结
sed 是处理文本的强大工具,适用于各种文本处理任务。通过合理利用正则表达式、脚本和命令选项,可以实现从简单的查找替换到复杂的文本编辑任务。