在 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 删除操作
在进行删除操作前,先介绍一个实用的辅助命令 nl
。nl
命令能够为文件添加行号,方便查看和操作文件内容,查看 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 解决各类文本处理问题,大幅提升工作效率。如果你在使用过程中有任何新的发现或疑问,欢迎在评论区交流分享!