自学内容网 自学内容网

Linux sed 的多个用法

sed 是 Linux 和类 Unix 系统中非常强大的文本流编辑器,它可以对文本进行替换、删除、插入、查找等多种操作。下面列出了 sed 常见的多种用法。

1. 基本替换

最常见的 sed 用法是进行文本替换。它使用以下语法:

sed 's/old-text/new-text/' filename
  • s 表示替换操作。
  • old-text 是要被替换的文本。
  • new-text 是替换后的文本。

示例:将文件 file.txt 中的 apple 替换成 orange

sed 's/apple/orange/' file.txt

2. 全局替换

默认情况下,sed 只会替换每一行中的第一个匹配项。如果要替换每一行中的所有匹配项,可以使用 g 标志(代表 global):

sed 's/old-text/new-text/g' filename

示例:将 apple 替换为 orange,替换每一行中的所有 apple

sed 's/apple/orange/g' file.txt

3. 替换并输出到文件

默认情况下,sed 会将结果输出到标准输出(即终端)。如果要将修改后的内容直接写回文件,可以使用 -i(in-place)选项:

sed -i 's/old-text/new-text/g' filename

示例:将文件 file.txt 中所有的 apple 替换为 orange 并直接保存:

sed -i 's/apple/orange/g' file.txt
  • 如果要创建一个备份文件(比如以 .bak 为扩展名),可以加上一个备份扩展名:
    sed -i.bak 's/apple/orange/g' file.txt

    这将创建 file.txt.bak 作为备份,并在 file.txt 中进行替换。

4. 替换时使用正则表达式

sed 支持使用正则表达式(RE)来匹配和替换文本。您可以使用更复杂的模式进行替换。

示例:替换行首的 foobar

sed 's/^foo/bar/' file.txt

示例:替换行尾的 foobar

sed 's/foo$/bar/' file.txt

5. 删除行

sed 也可以删除文件中的行。要删除特定的行,可以使用 d 命令:

  • 删除第 3 行:

    sed '3d' file.txt
  • 删除包含特定文本的所有行:

    sed '/pattern/d' file.txt

    例如,删除包含 apple 的所有行:

    sed '/apple/d' file.txt
  • 删除范围内的行:

    sed '2,5d' file.txt

    这会删除第 2 行到第 5 行的所有内容。

6. 打印指定行

sed 默认会打印所有的行,但你也可以使用 p 命令仅打印特定的行。

  • 打印第 2 行:

    sed -n '2p' file.txt
  • 打印匹配某个模式的行:

    sed -n '/pattern/p' file.txt
  • 打印第 2 到第 5 行:

    sed -n '2,5p' file.txt

7. 替换并在替换文本中使用反向引用

使用反向引用可以在替换文本中使用匹配的模式。

示例:将匹配到的电话号码格式从 123-456-7890 转换为 123.456.7890

sed 's/\([0-9]\{3\}\)-\([0-9]\{3\}\)-\([0-9]\{4\}\)/\1.\2.\3/' file.txt
  • \([0-9]\{3\}\) 表示匹配 3 个数字,并将其捕获为一个组。
  • \1 表示引用第一个捕获组(即前三个数字)。

8. 多重命令

sed 支持在单个命令中执行多个操作,通过分号(;)分隔每个操作。

示例:删除第 3 行并替换第 2 行的 appleorange

sed '3d; 2s/apple/orange/' file.txt

如果要执行更多命令,可以使用 -e 选项:

sed -e '3d' -e '2s/apple/orange/' file.txt

9. 使用正则表达式替换并保存输出

使用 sed 的正则表达式替换功能时,您也可以利用捕获组(Parentheses)来处理更复杂的替换。

示例:将 abc123def 替换为 abc-123-def,需要在替换字符串中加入分隔符:

sed 's/\([a-z]*\)\([0-9]*\)\([a-z]*\)/\1-\2-\3/' file.txt

这会将文本格式 abc123def 转换为 abc-123-def

10. 行号修改

你可以使用 = 命令在输出中显示每一行的行号:

sed '=' file.txt

这将输出每一行前面带上行号。

11. 文本插入和追加

使用 sed 可以在特定位置插入或追加文本。

  • 在第 2 行之后插入文本:

    sed '2a\This is a new line.' file.txt
  • 在第 3 行之前插入文本:

    sed '3i\This is a new line.' file.txt

12. 替换带有多行的文本

sed 默认处理的是单行文本,但你可以使用 N 命令将多行内容合并到模式空间,从而进行跨行操作。

示例:将两个连续的行合并成一行:

sed 'N;s/\n/ /' file.txt

这会将每对连续行合并成一行,用空格分隔。


总结

sed 是非常灵活和强大的文本处理工具,可以进行文本替换、删除、插入、打印、合并等各种操作。常见的用法包括:

  • 基本替换和全局替换
  • 删除行和打印行
  • 使用正则表达式进行复杂匹配
  • 修改文件内容并保存
  • 插入和追加文本
  • 使用反向引用和捕获组

通过熟练掌握这些基本用法,可以大大提高文本处理的效率。


原文地址:https://blog.csdn.net/m0_58223765/article/details/143744298

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!