sed 的一些常见用法

sed 是一个强大的文本处理工具,常用于在 Linux 脚本中对文件进行快速文本替换、删除、插入等操作。

1. 替换文本

bash复制

sed 's/old_text/new_text/g' filename
  • s 表示替换操作。

  • old_text 是要被替换的文本。

  • new_text 是替换后的文本。

  • g 表示全局替换(替换每一行中的所有匹配项)。

示例:将文件中的 "apple" 替换为 "orange"

bash复制

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

2. 删除行

bash复制

sed 'd' filename
  • d 表示删除操作。

示例:删除文件中的空白行

bash复制

sed '/^$/d' filename

示例:删除文件中的注释行(以 # 开头的行)

bash复制

sed '/^#/d' filename

3. 打印特定行

bash复制

sed -n '5p' filename
  • -n 表示只打印匹配的行。

  • 5p 表示打印第 5 行。

示例:打印文件的第 1 到第 10 行

bash复制

sed -n '1,10p' filename

4. 在文件中插入文本

bash复制

sed '3i\new_text' filename
  • 3i 表示在第 3 行之前插入文本。

  • new_text 是要插入的文本。

示例:在文件的第 5 行后插入 "Hello World"

bash复制

sed '5a\Hello World' filename
  • 5a 表示在第 5 行之后追加文本。

5. 使用正则表达式匹配行

bash复制

sed '/pattern/命令' filename

示例:将所有以 "error" 开头的行替换为 "ERROR: line_number: error_message"

bash复制

sed '/^error/s/^/ERROR: /' filename

6. 多个命令

bash复制

sed -e '命令1' -e '命令2' filename
  • -e 用于指定多个命令。

示例:先删除空白行,再将 "apple" 替换为 "orange"

bash复制

sed -e '/^$/d' -e 's/apple/orange/g' filename

7. 就地修改文件

bash复制

sed -i 's/old_text/new_text/g' filename
  • -i 表示直接修改文件,而不是输出到标准输出。

注意:使用 -i 时要小心,因为它会直接修改原文件。可以使用 -i.bak 创建备份文件。

示例:替换后创建备份文件

bash复制

sed -i.bak 's/old_text/new_text/g' filename

8. 地址范围操作

bash复制

sed 'address1,address2 命令' filename

示例:将第 3 行到第 7 行中的 "foo" 替换为 "bar"

bash复制

sed '3,7s/foo/bar/g' filename

9. 多行操作

bash复制

sed ':label; N; $!b label; 命令' filename
  • :label 定义一个标签。

  • N 读取下一行并追加到模式空间。

  • $!b label 如果不是最后一行,则跳转到标签。

示例:将文件中的所有连续空行替换为一行

bash复制

sed ':a; N; $!ba; s/\n\n*/\n/g' filename

10. 结合变量使用

在脚本中,可以将 sed 命令与变量结合使用:

bash复制

old="old_text"
new="new_text"
sed "s/$old/$new/g" filename

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HXQ_晴天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值