sed
(stream editor)是Linux和Unix系统中非常强大的文本处理工具,它可以对文本进行过滤和转换。sed
以行为单位处理文本,可以通过读取输入文件(或标准输入),应用一系列的编辑命令,然后将结果输出到标准输出(通常是屏幕)或文件中。
基本语法
sed [选项]... {脚本-地址} {命令} [输入文件]...
- 选项:
sed
命令的选项用于控制其行为,如-i
用于直接修改文件内容。 - 脚本-地址:指定要应用命令的行号或模式。如果没有指定,命令将应用于所有行。
- 命令:要执行的
sed
编辑命令。 - 输入文件:要处理的文件名。如果没有指定输入文件,
sed
将从标准输入读取数据。
常用命令
s/查找的文本/替换的文本/标志
:替换文本。标志
可以是g
(全局替换),i
(忽略大小写)等。d
:删除指定的行。p
:打印指定的行。a\text
:在指定行后追加新文本。i\text
:在指定行前插入新文本。c\text
:用新文本替换指定行。
示例
-
替换文本:将文件
example.txt
中所有的"apple"替换为"orange"。sed 's/apple/orange/g' example.txt
注意:此命令不会修改原文件,只是将结果输出到标准输出。
-
直接修改文件:将文件
example.txt
中所有的"apple"替换为"orange",并直接修改文件内容。sed -i 's/apple/orange/g' example.txt
注意:
-i
选项用于直接修改文件。根据sed
的版本,可能需要指定一个扩展名作为备份,如-i.bak
。 -
删除行:删除文件
example.txt
中所有包含"banana"的行。sed '/banana/d' example.txt sed -i '/banana/d' example.txt -- 删除example.txt从第二行到第八行数据 sed '2,8d' example.txt
-
打印特定行:打印文件
example.txt
的第2行。sed -n '2p' example.txt
注意:
-n
选项与p
命令一起使用时,sed
只打印那些被p
命令选中的行。查一下example.txt的最后一行(明确查看确定只有10行为前提)
-- 这种方法可行 但是需要查询或定位你的最后一行的行号 sed -n '10p' example.txt -- 这种方法直接就定位了 sed -n '$p' example.txt -- 查一下example.txt的第七行到第十行的内容 sed -n '7,10p' example.txt
-
在指定行前插入文本:在文件
example.txt
的第2行前后插入文本"New line"。-- 第2行前插入文本"New line" sed -i '2i\New line' example.txt -- 第2行后插入文本"New line" sed -i '2a\New line' example.txt -- 这是在最后一行行前添加字符串 sed -i '$i 192.0.2.80 tidb80' /etc/hosts -- 这是在最后一行行后添加字符串 sed -i '$a 192.0.2.80 tidb80' /etc/hosts
-
关闭 /etc/selinux/config
-- 第一种方法(精确匹配法) sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config -- 第二种方法(正则表达式匹配法) sed -i 's#SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config (正则表达式匹配法)
sed
的功能非常强大,通过组合不同的命令和选项,可以完成复杂的文本处理任务。然而,由于其语法相对复杂,初学者可能需要一些时间来熟悉和掌握它。