You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中将文本文件内容复制到变量并修改变量?

在Bash中将文件内容存入变量并修改的方法

当然可以!在Bash环境里把文本文件的内容存到变量中,然后在变量里修改内容完全不影响原文件,这是非常常用的操作。我来给你详细讲怎么实现:

一、将文件内容读取到变量里

有几种简单的方式,这里推荐最直观且能保留格式的写法:

方法1:用cat命令配合命令替换

如果你想完整保留文件里的换行、空格等格式,一定要用双引号把命令替换的结果包起来:

# 假设你的文件名叫input.txt
file_content="$(cat input.txt)"

这样变量file_content里就精准存储了原文件的所有内容,包括换行符和空格。如果不用双引号,Bash会把换行、连续空格都替换成单个空格,可能会破坏原格式。

方法2:用read命令(适合大文件或特殊场景)

如果文件特别大,或者你想逐行处理,也可以用read循环读取,但日常用第一种方法足够便捷:

file_content=""
while IFS= read -r line; do
    file_content+="$line"$'\n'
done < input.txt

这个方法会逐行读取文件,把每一行拼接到变量里,同时保留换行符。

二、修改变量里的内容

拿到变量里的内容后,就可以用Bash的参数扩展或者文本处理工具来修改了,举几个常用场景:

1. 全局替换文本

比如把变量里所有的"old_str"替换成"new_str":

modified_content="${file_content//old_str/new_str}"

如果只需要替换第一个出现的目标文本,把双斜杠换成单斜杠就行:

modified_content="${file_content/old_str/new_str}"

2. 删除指定内容

如果要删除所有的"unwanted_str",可以这么写:

modified_content="${file_content//unwanted_str/}"

3. 用sed/awk等工具处理

如果你需要更复杂的文本操作,比如正则替换、按列处理,可以把变量内容传给sed或awk:

# 用sed全局替换"test"为"example"
modified_content=$(echo "$file_content" | sed 's/test/example/g')

# 用awk提取第一列内容
modified_content=$(echo "$file_content" | awk '{print $1}')

注意这里echo的时候一定要用双引号包裹变量,不然会丢失原格式。

三、完整示例

假设你的input.txt内容是:

Hello Bash!
This is a test file.
I love shell scripting.

执行以下命令:

# 读取文件内容到变量
file_content="$(cat input.txt)"

# 查看原内容
echo "原文件内容:"
echo "$file_content"

# 修改:把所有"test"换成"sample",并删除"love"
modified_content="${file_content//test/sample}"
modified_content="${modified_content//love/}"

# 查看修改后的内容
echo -e "\n修改后的内容:"
echo "$modified_content"

执行后你会看到修改后的内容,而原input.txt完全没有变化。

注意事项

  • 如果文件里包含特殊字符(比如$、`、\),用"$(cat file)"的方式会自动处理转义,避免出现意外错误。
  • 如果变量内容非常大,只要系统内存足够,Bash都能正常处理,不用担心容量问题。

内容的提问来源于stack exchange,提问作者Maka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:46:47