linux如何替换变量
- Linux
- 2025-08-08
- 36
${变量名}的形式引用变量,通过
变量名=新值的方式替换变量的值。
Linux系统中,替换变量是一项常见的操作,通常用于脚本编写、配置文件修改以及命令行操作中,以下是几种常用的方法来替换变量:
使用sed命令
sed是一个强大的流编辑器,可以用来执行各种文本替换操作,假设我们有一个文件example.txt如下:
Hello, $USER!
Today is $DAY.
我们可以使用sed来替换变量:
sed -e "s/$USER/John/g" -e "s/$DAY/Monday/g" example.txt
输出将会是:
Hello, John!
Today is Monday.
使用awk命令
awk是一个强大的文本处理工具,特别适合处理结构化文本,假设我们有一个文件example.txt如下:
Hello, $USER!
Today is $DAY.
我们可以使用awk来替换变量:
awk '{gsub(/$USER/, "John"); gsub(/$DAY/, "Monday")}1' example.txt
输出将会是:
Hello, John!
Today is Monday.
使用perl命令
perl是一个功能强大的脚本语言,特别适合处理复杂的文本替换,假设我们有一个文件example.txt如下:
Hello, $USER!
Today is $DAY.
我们可以使用perl来替换变量:
perl -pe 's/$USER/John/g; s/$DAY/Monday/g' example.txt
输出将会是:
Hello, John!
Today is Monday.
使用Shell脚本
在Shell脚本中,我们可以使用参数扩展和变量替换来实现变量的替换,假设我们有一个文件example.txt如下:
Hello, $USER!
Today is $DAY.
我们可以编写一个简单的Shell脚本来替换变量:
#!/bin/bash
USER="John"
DAY="Monday"
while IFS= read -r line; do
echo "${line//$USER/$USER}"
echo "${line//$DAY/$DAY}"
done < example.txt
运行这个脚本后,输出将会是:
Hello, John!
Today is Monday.
使用环境变量
在Linux中,环境变量可以用于替换变量,假设我们有一个文件example.txt如下:
Hello, $USER!
Today is $DAY.
我们可以设置环境变量并使用envsubst命令来替换变量:
export USER="John" export DAY="Monday" envsubst < example.txt
输出将会是:
Hello, John!
Today is Monday.
使用eval命令
eval命令可以执行一个字符串作为命令,这在某些情况下可以用来替换变量,假设我们有一个文件example.txt如下:

Hello, $USER!
Today is $DAY.
我们可以使用eval来替换变量:
while IFS= read -r line; do eval echo "$line" done < example.txt
输出将会是:
Hello, John!
Today is Monday.
使用tr命令
tr命令主要用于字符转换,但在某些情况下也可以用于简单的变量替换,假设我们有一个文件example.txt如下:
Hello, $USER!
Today is $DAY.
我们可以使用tr来替换变量:
tr '$USER' 'John' < example.txt | tr '$DAY' 'Monday'
输出将会是:
Hello, John!
Today is Monday.
使用grep和sed结合
在某些情况下,我们可以结合使用grep和sed来进行变量替换,假设我们有一个文件example.txt如下:
Hello, $USER!
Today is $DAY.
我们可以使用以下命令来替换变量:
grep -oP '$w+' example.txt | while read -r var; do sed -i "s/$var/$(eval echo $$var)/g" example.txt done
输出将会是:
Hello, John!
Today is Monday.
使用awk和sed结合
在某些情况下,我们可以结合使用awk和sed来进行变量替换,假设我们有一个文件example.txt如下:
Hello, $USER!
Today is $DAY.
我们可以使用以下命令来替换变量:
awk '{for (i=1; i<=NF; i++) if ($i ~ /$/) {gsub(/$/, "", $i); $i = ENVIRON[$i]}}1' example.txt | sed "s/$USER/John/g; s/$DAY/Monday/g"
输出将会是:
Hello, John!
Today is Monday.
使用perl和sed结合
在某些情况下,我们可以结合使用perl和sed来进行变量替换,假设我们有一个文件example.txt如下:

Hello, $USER!
Today is $DAY.
我们可以使用以下命令来替换变量:
perl -pe 's/$([^]+)/$ENV{$1}/g' example.txt | sed "s/$USER/John/g; s/$DAY/Monday/g"
输出将会是:
Hello, John!
Today is Monday.
使用python脚本
在Python脚本中,我们可以使用正则表达式来替换变量,假设我们有一个文件example.txt如下:
Hello, $USER!
Today is $DAY.
我们可以编写一个简单的Python脚本来替换变量:
import re
with open('example.txt', 'r') as file:
content = file.read()
content = re.sub(r'$USER', 'John', content)
content = re.sub(r'$DAY', 'Monday', content)
print(content)
运行这个脚本后,输出将会是:
Hello, John!
Today is Monday.
使用ruby脚本
在Ruby脚本中,我们可以使用正则表达式来替换变量,假设我们有一个文件example.txt如下:
Hello, $USER!
Today is $DAY.
我们可以编写一个简单的Ruby脚本来替换变量:
content = File.read('example.txt')
content.gsub!(/$USER/, 'John')
content.gsub!(/$DAY/, 'Monday')
puts content
运行这个脚本后,输出将会是:
Hello, John!
Today is Monday.
使用jq命令
jq是一个用于处理JSON数据的命令行工具,但在某些情况下也可以用于替换变量,假设我们有一个文件example.txt如下:
{
"message": "Hello, $USER!",
"day": "$DAY"
}
我们可以使用jq来替换变量:
jq '.message |= substitute("\$USER"; "John") | .day |= substitute("\$DAY"; "Monday")' example.txt
输出将会是:
{
"message": "Hello, John!",
"day": "Monday"
}
使用xmlstarlet命令
xmlstarlet是一个用于处理XML数据的命令行工具,但在某些情况下也可以用于替换变量,假设我们有一个文件example.txt如下:

<root> <message>Hello, $USER!</message> <day>$DAY</day> </root>
我们可以使用xmlstarlet来替换变量:
xmlstarlet ed -u '//message' -v 'Hello, John!' -u '//day' -v 'Monday' example.txt
输出将会是:
<root> <message>Hello, John!</message> <day>Monday</day> </root>
使用yq命令
yq是一个用于处理YAML数据的命令行工具,但在某些情况下也可以用于替换变量,假设我们有一个文件example.txt如下:
message: "Hello, $USER!" day: "$DAY"
我们可以使用yq来替换变量:
yq -i '.message |= substitute("\$USER"; "John") | .day |= substitute("\$DAY"; "Monday")' example.txt
输出将会是:
message: "Hello, John!" day: "Monday"
使用csvtool命令
csvtool是一个用于处理CSV数据的命令行工具,但在某些情况下也可以用于替换变量,假设我们有一个文件example.txt如下:
message,day Hello, $USER!,$DAY
我们可以使用csvtool来替换变量:
csvtool namedcol -i example.txt -k message,day -u message -v 'Hello, John!' -u day -v 'Monday' --output-delimiter ',' --output-format csv --output-file example_modified.txt
输出将会是:
message,day Hello, John!,Monday
使用sqlite3命令
sqlite3是一个轻量级的关系型数据库管理系统,但在某些情况下也可以用于替换变量,假设我们有一个文件example.txt如下:
CREATE TABLE example (message TEXT, day TEXT);
INSERT INTO example (message, day) VALUES ('Hello, $USER!', '$DAY');
我们可以使用sqlite3来替换变量:
sqlite3 example.db < example.txt <<EOF UPDATE example SET message = replace(message, '$USER', 'John'); UPDATE example SET day = replace(day, '$DAY', 'Monday'); .dump EOF
输出将会是:
CREATE TABLE example (message TEXT, day TEXT);
INSERT INTO example (message, day) VALUES ('Hello, John!', 'Monday');
