sed命令

sed(全称:Stream Editor)是一个在Linux系统中广泛使用的 流编辑器 ,用于对文件或数据流进行文本处理。它具有强大的文本替换、插入和删除功能,并且支持正则表达式,适用于日志分析、文件批处理和脚本自动化等场景。

基本语法

sed的基本语法如下:

sed [options] 'command' file
  • options:可选参数,用于控制sed的行为。

  • command:要执行的sed命令。

  • file:要处理的文件名。如果不指定文件名,sed将从标准输入读取数据。

常用选项

  • -e:允许多次使用sed的编辑命令。

  • -i:直接修改文件(原地编辑)。

  • -n:不自动打印模式空间中的行,常与p命令配合使用,用于只打印匹配的行。

  • -f:从指定的脚本文件读取sed命令。

  • -r:使用扩展正则表达式。

常用命令

  1. 替换文本
  • s/old/new/:替换匹配的第一个字符串。

  • s/old/new/g:替换匹配的所有字符串(全局替换)。

  • s/old/new/gi:替换匹配的所有字符串,不区分大小写。

  1. 删除文本行
  • d:删除当前行。

  • 2d:删除第二行。

  • 5,10d:删除第5到第10行。

  • /pattern/d:删除匹配指定模式的行。

  1. 追加文本
  • /pattern/a\new text:在匹配指定模式的行后追加文本。
  1. 插入文本
  • /pattern/i\new text:在匹配指定模式的行前插入文本。
  1. 替换指定行的内容
  • c\new content:替换当前行。

示例

  1. 替换文本
    sed 's/ERROR/WARN/g' log.txt
    ```

将`log.txt`文件中的所有`ERROR`替换为`WARN`<b class="card40_249__sup_a7f6" data-sup="sup">2</b>。

2. **直接修改文件** <b class="card40_249__sup_a7f6" data-sup="sup">4</b>

```bash
    sed -i 's/old/new/g' file.txt
    ```

直接修改`file.txt`文件,将其中的所有`old`替换为`new`。

3. **替换带有分隔符的文本** <b class="card40_249__sup_a7f6" data-sup="sup">2</b>

```bash
    sed 's|old_string|new_string|g' file.txt
    ```

将`file.txt`文件中的所有`old_string`替换为`new_string`<b class="card40_249__sup_a7f6" data-sup="sup">5</b>。

4. **删除指定范围的行** <b class="card40_249__sup_a7f6" data-sup="sup">6</b>

```bash
    sed '5,10d' file.txt
    ```

删除`file.txt`文件中的第5到第10行<b class="card40_249__sup_a7f6" data-sup="sup">3</b>。

5. **追加文本** 

```bash
    sed '/Linux/a\This is added text' file.txt
    ```

在`file.txt`文件中匹配到`Linux`的行后追加`This is added text`<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。

6. **插入文本** <b class="card40_249__sup_a7f6" data-sup="sup">3</b>

```bash
    sed '/Linux/i\This is inserted text' file.txt
    ```

在`file.txt`文件中匹配到`Linux`的行前插入`This is inserted text`<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。

### 脚本文件

可以将多个sed命令写入一个脚本文件,然后通过`-f`选项执行该脚本<b class="card40_249__sup_a7f6" data-sup="sup">3</b>:

```bash
sed -f script.sed file.txt

扩展正则表达式

使用-r选项可以启用扩展正则表达式:

sed -r 's/(old)(.*)/\2\1/g' file.txt

总结

sed是一个功能强大的文本处理工具,通过结合正则表达式,可以实现复杂的文本编辑任务。掌握其基本语法和常用命令,可以大大提高在Linux环境下的文本处理效率。

Top