在Linux系统中,"置换命令"通常指用于文件内容替换、文本处理或数据转换的命令,这些命令在系统管理、日志分析、自动化脚本等领域应用广泛,以下是Linux中常用的置换命令及其详细用法,包括基础语法、实际案例和注意事项。

sed
命令——流编辑器
sed
(Stream Editor)是Linux中最强大的文本替换工具之一,支持对文件进行逐行处理并输出结果,其基本语法为sed 's/原字符串/新字符串/选项' 文件名
,其中s
表示替换命令,选项包括g
(全局替换)、i
(忽略大小写)等。
基础用法示例:
- 全局替换:将文件中所有"old"替换为"new"
sed 's/old/new/g' example.txt
- 忽略大小写替换:
sed 's/old/new/gi' example.txt
- 直接修改文件(需谨慎使用):
sed -i 's/old/new/g' example.txt
高级功能:
- 使用正则表达式:
sed 's/[0-9]/X/g'
(将所有数字替换为X) - 多行替换:
sed '/^start/,/^end/s/old/new/'
(在指定行范围内替换) - 备份并修改:
sed -i.bak 's/old/new/g' example.txt
(生成.bak备份文件)
注意事项:sed
默认使用单引号包裹命令,避免shell变量扩展;复杂替换建议使用脚本模式(sed -f script.sed
)。

awk
命令——文本处理工具
awk
擅长按列处理文本,支持条件判断和循环,适合结构化数据(如CSV、日志文件),其替换语法为awk '{gsub(/原字符串/,"新字符串")}1' 文件名
,其中gsub
为全局替换函数。
基础用法示例:
- 按列替换:替换第2列中的"error"为"warning"
awk '{gsub(/error/,"warning",$2)}1' log.txt
- 条件替换:仅替换包含"critical"的行
awk '/critical/{gsub(/failed/success/)}1' report.txt
- 输出到新文件:
awk '{gsub(/old/new/)}1' input.txt > output.txt
高级功能:
- 结合变量:
awk '{gsub(/name/,"'$USER'/)}1' file
- 使用内置函数:
awk '{sub(/./,"X",$1)}1'
(仅替换每行第一个字符)
注意事项:awk
的替换功能需结合模式匹配使用,性能优于sed
处理大文件时。

tr
命令——字符替换
tr
用于转换或删除字符,支持单字符或字符集替换,语法为tr '原字符集' '新字符集' < 文件
。
基础用法示例:
- 大小写转换:
tr 'A-Z' 'a-z' < input.txt
- 删除指定字符:
tr -d '0-9' < file.txt # 删除所有数字
- 字符压缩:
tr -s ' ' < file.txt # 合并多个空格为一个
注意事项:tr
不支持正则表达式,仅适合简单字符操作;输入需通过管道或重定向提供。
expand
与unexpand
——制表符与空格转换
expand
:将制表符(\t
)转换为空格expand -t 4 file.txt # 每个制表符转换为4个空格
unexpand
:将空格转换为制表符unexpand -t 4 file.txt
perl
命令——高级文本处理
perl
结合了sed
和awk
的功能,支持复杂正则表达式,语法为perl -pe 's/原字符串/新字符串/g' 文件
。
示例:
perl -pe 's/\b(\d{3})-\d{4}\b/$1****/g' data.txt # 脱敏电话号码
命令对比与适用场景
命令 | 适用场景 | 支持正则 | 是否支持多行 |
---|---|---|---|
sed |
简单文本替换、流处理 | 是 | 部分支持 |
awk |
按列处理、条件替换 | 是 | 支持 |
tr |
单字符转换、删除 | 否 | 不支持 |
perl |
复杂正则、编码转换 | 是 | 支持 |
实际应用案例
案例1:批量修改配置文件
将Nginx配置文件中的listen 80
替换为listen 443
:
sed -i 's/listen 80/listen 443/g' nginx.conf
案例2:日志数据清洗
从Apache日志中提取IP地址并替换为:
awk '{gsub(/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/,"***")}1' access.log
注意事项
- 备份重要文件:使用
sed -i
前建议先备份。 - 测试命令:复杂替换先用
sed
或awk
的-n
选项测试输出。 - 性能优化:大文件优先使用
awk
或perl
,避免sed
多次遍历。
相关问答FAQs
Q1: sed
和awk
在文本替换时有什么区别?
A1: sed
更适合简单的行内替换,语法简洁,适合处理单行文本;而awk
支持按列处理和复杂逻辑,适合结构化数据(如表格、日志)。sed
无法直接处理多列条件替换,而awk
可以通过$1
、$2
等列变量实现精准替换。
Q2: 如何安全地使用sed -i
直接修改文件?
A2: 为避免误操作,建议先使用sed
的-n
选项预览替换结果(如sed -n 's/old/new/p' file
),确认无误后再用sed -i
修改,可通过添加扩展名备份文件(如sed -i.bak 's/old/new/g' file
),保留原始文件以便恢复。