![一次批量替换多个文件中的多个变量](https://linux22.com/image/208556/%E4%B8%80%E6%AC%A1%E6%89%B9%E9%87%8F%E6%9B%BF%E6%8D%A2%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%A4%9A%E4%B8%AA%E5%8F%98%E9%87%8F.png)
示例:我有 40 个不同的变量,$VAR
例如.txt
位于/home/user/EXAMPLE/
.如何替换 100 个文件中的所有变量?
为了告诉系统变量是什么,最好使用类似的文件.csv
或.txt
带有分隔符的文件。例子:
$VAR=x
$VAR2=xx
$VAR3=xxx
知道如何进行批量编辑吗?
答案1
将问题分为两部分:
- 遍历文件
- 将替换应用到文件
如果您在EXAMPLE
目录中,您可以像这样循环遍历所有文件
for file in *.txt
do
echo "Considering file $file"
done
要替换一组变量,理想情况下没有一个变量会与现有的 shell 变量(例如$PATH
或$HOME
)冲突,然后您可以使用envsubst
.
创建一个文件variables.sh
,其中每一行都采用以下格式:
export varname=value
export anothername='a longer value'
然后,您可以使用此代码将诸如$varname
和 之类的变量替换$anothername
到命名文件中:
( . variables.sh; envsubst ) <"$file" >"$file.tmp" &&
mv -f "$file.tmp" "$file"
将这些滚动在一起:
for file in *.txt
do
echo "Considering file $file"
( . variables.sh; envsubst ) <"$file" >"$file.tmp" &&
mv -f "$file.tmp" "$file"
done