Sed 命令实战:高效实现文本过滤与替换

在 Linux 系统的文本处理领域,Sed(Stream Editor,流编辑器)是一款功能强大且高效的工具。它能够对文本进行过滤和替换操作,无论是处理配置文件、日志数据,还是进行数据清洗,Sed 都能大显身手。接下来,我们就深入学习 Sed 命令的各种用法。

Sed 基础语法与查询操作

Sed 的基本命令格式为 sed 可选项 目标文件,通过不同的可选项组合,可以对目标文件进行灵活的过滤查询或替换操作。常用的可选项及其含义如下:

  • p:打印匹配的行
  • $:代表文本的最后一行
  • -n:仅显示处理后的结果,不输出原始未处理的行
  • -e:根据表达式进行处理,可用于执行多个 Sed 命令

假设有一个名为 6.txt 的文件,现在想要列出其中第 3 - 5 行的数据,使用以下命令即可实现:

sed -n '3,5p' 6.txt

若想显示从第一行到最后一行的所有数据,命令如下:

sed -n '1,$p' 6.txt

希望在显示内容的同时打印行号,借助 = 选项就能达成目标,例如打印第 3 - 5 行的数据并展示行号:

sed -n '3,5{=;p}' 6.txt

Sed 查找与正则表达式运用

Sed 支持查找操作,并且全面兼容正则表达式。默认情况下,查找操作区分大小写,如果需要进行不区分大小写的查找,添加 I 参数即可。比如,在 6.txt 文件中查找包含 zhang的行(不区分大小写),命令为:

sed -n '/zhang/Ip' 6.txt

常用的正则表达式元字符有:

  • ^:表示行的起始位置,如 ^aaa 用于匹配以 aaa 开头的行
  • $:表示行的结束位置,像 bbb$ 能够匹配以 bbb 结尾的行
  • .*:代表任意字符序列,^.* 可匹配以任意字符开头的行

Sed 删除操作

在进行删除操作前,先介绍一个实用的辅助命令 nlnl 命令能够为文件添加行号,方便查看和操作文件内容,查看 6.txt 文件并添加行号的命令为:

nl 6.txt

Sed 使用 d 选项执行删除操作。若要删除 6.txt 文件中的第 3 行,命令如下:

sed '3d' 6.txt

如果需要删除第 3 - 5 行,只需将命令调整为:

sed '3,5d' 6.txt

Sed 修改与替换操作

插入与追加

插入操作:i 参数用于在目标行前面插入内容。例如,在 6.txt 文件的第 3 行前面插入一行内容 new line,命令如下:

sed '3i new line' 6.txt

追加操作:a 参数用于在目标行后面追加内容。比如,在 6.txt 文件的第 3 行后面追加一行内容 another line,命令为:

sed '3a another line' 6.txt

替换操作

Sed 最常用的替换命令格式为 s/oldString/newString/。例如,将 6.txt 文件中的 zhangsan替换为 zhangsansansan,使用以下命令:

sed 's/zhangsan/zhangsansansan/g' 6.txt

这里的 g 表示全局替换,即替换一行中所有匹配的内容。如果不添加 g,则只替换每行中第一个匹配的内容。

上述的替换操作默认只是在输出结果中进行修改,并不会改变原文件内容。若要直接修改原文件数据,需要先对文件进行备份,然后使用 -i 选项。例如,先将文件 6.txt 备份为 6.txt.bak,再将文件中的 zhangsan替换为 zhangsansansan,具体操作如下:

cp 6.txt 6.txt.bak
sed -i 's/zhangsan/zhangsansansan/g' 6.txt

Sed 综合练习:获取本机 IP 地址

在 Linux 系统中,可以通过 ifconfig 命令获取本机 IP 信息(在 Windows 系统中使用 ipconfig)。如果是 mini 版 Linux 系统,可能没有预装 ifconfig 服务,这时需要先进行安装(由于博主已经安装过了,这里就不放截图了):

yum search ifconfig
yum install -y net-tools.x86_64

安装完成后,使用以下命令获取 IP 地址:

ifconfig ens33 | grep 'inet ' | sed -e 's/inet //' | sed -e 's/  netmask.*//'

也可以使用 \s(表示空格)和 *(表示 0 次到多次)来优化命令:

ifconfig ens33 | grep 'inet ' | sed -e 's/\s*inet //' | sed -e 's/\s*netmask.*//'

如果使用 ip addr 命令获取 IP 地址,命令如下:

ip addr | grep ens33 | grep 'inet' | sed -e 's/\s*inet //' | sed -e 's/\/.*//'

Sed 命令凭借其强大的文本处理能力,在 Linux 系统管理和数据处理中占据着重要地位。通过不断练习和实践上述各种操作,相信你能够熟练运用 Sed 解决各类文本处理问题,大幅提升工作效率。如果你在使用过程中有任何新的发现或疑问,欢迎在评论区交流分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值