Linux `sed` 命令详解
- Linux `sed` 命令详解
- 1、基本语法
- 2、常用命令
- 2.1 替换
- 2.2 删除行
- 2.3 查找并打印行
- 2.4 插入与追加
- 2.5 多命令组合
- 3、高级用法
- 3.1 替换并保存结果到新文件
- 3.2 在范围内替换
- 3.3 正则表达式匹配
- 4、小结
Linux sed
命令详解
sed
是 Linux 系统中非常强大的流编辑器,可对文件或文本流进行查找、替换、插入和删除等操作。
1、基本语法
sed [选项] '命令' 文件名
其中:
- 选项:
-e
:直接在命令行模式下运行sed
脚本。-i
:对文件内容进行原地修改(在文件中直接替换)。-n
:安静模式(默认输出已匹配的行,可以结合p
命令使用)。-f
:从指定的脚本文件中读取sed
命令。
- 命令:
sed
中的命令用于执行查找、替换、插入和删除等操作。
2、常用命令
2.1 替换
语法:
sed 's/原字符串/新字符串/标志' 文件名
s
:表示替换操作。标志
:常用的标志是g
,表示全局替换。
示例:
# 将文件 test.txt 中的 "hello" 替换为 "hi"
sed 's/hello/hi/' test.txt# 将文件 test.txt 中的所有 "hello" 替换为 "hi"(全局替换)
sed 's/hello/hi/g' test.txt# 使用 -i 选项直接修改文件内容
sed -i 's/hello/hi/g' test.txt
运行结果:
2.2 删除行
语法:
sed '行号d' 文件名
d
:表示删除操作。
示例:
# 删除 test.txt 文件中的第 2 行
sed '2d' test.txt# 删除第 2 到第 4 行
sed '2,4d' test.txt
运行结果:
2.3 查找并打印行
语法:
sed -n '/模式/p' 文件名
-n
:安静模式,只输出匹配的行。/模式/
:匹配的模式。p
:表示打印操作。
示例:
# 打印文件test.txt 中包含 "hello" 的行
sed -n '/hello/p' test.txt
运行结果:
2.4 插入与追加
语法:
sed '行号i\内容' 文件名 # 插入
sed '行号a\内容' 文件名 # 追加
i
:在指定行前插入内容。a
:在指定行后追加内容。
示例:
# 在第 2 行前插入 "This is an inserted line."
sed '2i\This is an inserted line.' test.txt# 在第 2 行后追加 "This is an appended line."
sed '2a\This is an appended line.' test.txt
运行结果:
2.5 多命令组合
使用 -e
选项,或者用 ;
分隔命令,可以一次执行多个 sed
命令。
示例:
# 在 test.txt 中,先替换 "hello" 为 "hi",然后删除第 3 行
sed -e 's/hello/hi/g' -e '3d' test.txt
运行结果:
3、高级用法
3.1 替换并保存结果到新文件
可以将结果重定向到新文件,而不更改原文件内容。
# 将hello替换为hi并将替换后的结果输出到new_test.txt
sed 's/hello/hi/g' test.txt > new_test.txt
运行结果:
3.2 在范围内替换
可以指定行范围,仅对特定行范围内的内容进行替换。
示例:
# 只在第 2 到第 4 行内将 "hello" 替换为 "hi"
sed '2,4s/hello/hi/g' test.txt
运行结果:
3.3 正则表达式匹配
sed
可以使用正则表达式匹配字符串,例如查找包含特定模式的行。
示例:
# 将所有以 "test" 开头的行的 "test" 替换为 "exam"
sed '/^hello/s/hello/hi/' test.txt
4、小结
sed
非常适合处理大量数据的批量修改。- 使用
-i
选项时要小心,因为它会直接修改文件内容。 - 本文只介绍了一些基本的用法,更多高级用法还需要大家自行组合摸索。
只有互相学习,才能获得更大的进步!