sed 命令详解

sed 是一个强大的文本处理工具,用于流编辑(Stream Editor),能够在文本流中执行编辑操作,如查找和替换、删除行、插入内容等。它非常适合对大文件或多行文本进行批量操作。sed 的工作模式是读取输入、处理文本、输出结果。

基本语法

sed [选项] '操作' 文件名
  • 选项sed 提供了多个选项用于控制操作行为(如是否直接修改文件等)。
  • 操作:对文本进行的具体操作,如查找、替换、删除等。
  • 文件名:要处理的文本文件。

1. 常见选项

  • -n:抑制默认输出,只输出处理后的内容(单词缩写:no-output)。
  • -e:允许使用多个 sed 操作(链式执行)(单词缩写:expression)。
  • -i:直接修改文件而不将结果输出到标准输出(单词缩写:in-place 就地,原地)。
  • -r:使用扩展正则表达式(ERE),而不是基本正则表达式(BRE)(单词缩写:regular-exprerssion)。
  • -f:从指定文件中读取 sed 脚本(单词缩写:file)。

2. 常见操作

2.1. 替换操作
  • 语法s/模式/替换文本/标志
sed 's/old/new/' file.txt
  • 作用:将 file.txt 文件中的第一个匹配 old 的字符串替换为 new
  • 标志
    • /g:全局替换(替换每一行中的所有匹配项)(global)。
    • /i:忽略大小写(ignore case)。

示例:

  • 替换每行中第一个 appleorange

    sed 's/apple/orange/' file.txt
    
  • 替换每行中的所有 appleorange

    sed 's/apple/orange/g' file.txt
    
  • 忽略大小写进行替换:

    sed 's/apple/orange/gi' file.txt
    
2.2. 删除行
  • 语法N d (其中 N 为行号)
sed '2d' file.txt
  • 作用:删除文件 file.txt 中的第 2 行。

示例:

  • 删除第 3 行:

    sed '3d' file.txt
    
  • 删除第 1 至第 5 行:

    sed '1,5d' file.txt
    
  • 删除所有包含特定模式的行(如删除包含 apple 的行):

    sed '/apple/d' file.txt
    
2.3. 打印特定行
  • 语法N p/模式/ p
sed -n '3p' file.txt
  • 作用:打印 file.txt 文件中的第 3 行(使用 -n 选项抑制默认输出,只输出指定行)。

示例:

  • 打印文件的第 1 到第 5 行:

    sed -n '1,5p' file.txt
    
  • 打印包含 apple 的行:

    sed -n '/apple/p' file.txt
    
2.4. 插入/追加文本
  • 插入行:在指定行之前插入文本。

    sed '2i\This is an inserted line' file.txt
    
    • 作用:在第 2 行之前插入 This is an inserted line
  • 追加行:在指定行之后追加文本。

    sed '3a\This is an appended line' file.txt
    
    • 作用:在第 3 行之后添加 This is an appended line
2.5. 替换特定行
sed '3s/old/new/' file.txt
  • 作用:只替换第 3 行中的 oldnew
2.6. 多重编辑

使用 -e 选项或用分号 ; 来分隔多个 sed 命令。

sed -e 's/old/new/' -e 's/foo/bar/' file.txt

或者:

sed 's/old/new/; s/foo/bar/' file.txt
  • 作用:在 file.txt 中,首先将 old 替换为 new,然后将 foo 替换为 bar

3. 高级用法

3.1. 使用正则表达式

sed 支持正则表达式,可以用来处理更复杂的文本操作。

  • 匹配多个字符替换:

    sed 's/[0-9]/#/g' file.txt
    
    • 作用:将所有数字替换为 #
  • 匹配任意字母:

    sed 's/[a-zA-Z]/*/g' file.txt
    
    • 作用:将所有字母替换为 *
3.2. 以行为单位的范围操作

sed 支持指定行范围的操作。

  • 替换第 2 到第 4 行中的文本

    sed '2,4s/foo/bar/' file.txt
    
  • 删除第 5 到最后一行的文本

    sed '5,$d' file.txt
    
3.3. 使用文件作为输入

如果你有大量的 sed 脚本或复杂的逻辑,可以将这些命令放在一个文件中,然后使用 -f 选项运行。

sed -f script.sed file.txt
  • script.sed 文件示例:
    s/foo/bar/g
    2d
    /apple/d
    

4. 修改文件的内容(-i 选项)

  • 语法sed -i '操作' 文件名
sed -i 's/old/new/g' file.txt
  • 作用:直接在文件 file.txt 中进行替换操作,而不输出到终端。这种方式修改文件后不会保留备份。

  • 保留备份

    sed -i.bak 's/old/new/g' file.txt
    
    • 作用:在修改文件前,生成 file.txt.bak 作为备份。

5. 常见操作汇总

  • 查找并替换(全局)

    sed 's/old/new/g' file.txt
    
  • 删除包含某个模式的行

    sed '/pattern/d' file.txt
    
  • 打印特定行范围

    sed -n '10,20p' file.txt
    
  • 插入文本

    sed '3i\This is an inserted line' file.txt
    
  • 直接修改文件内容

    sed -i 's/old/new/' file.txt
    

总结

sed 是一个非常灵活的工具,它的主要用途是查找和替换、删除或修改文本中的某些内容。通过结合正则表达式和行范围,它可以完成非常复杂的文本操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值