bash - 在 bash 脚本中更改文件的最佳方法
问题描述
我有一个包含变量和值的文件
目标:打开文件并用输入id替换所有id
[FILE]
var1 = 2
id = 3
var3 = 5
id = 12
var4 = 5
而且我无法将 id 值替换为新值。
这是我的代码,任何帮助或其他东西都会有所帮助。谢谢
#!/bin/bash
filename=$1
uuid=$2
input="./$filename"
# awk -v find="id " -v field="5" -v newval="abcd" 'BEGIN {FS=OFS="="} {if ($1 == find) $field=newval; print $1}' $input
while IFS= read -r line
do
awk -v find="id " -v field="5" -v newval="abcd" 'BEGIN {FS=OFS="="} {if ($1 == find) $field=newval;}' $input
echo $line
done < "$input"
预期产出
execute
./myscript.sh file.cnf 77
expected output:
[FILE]
var1 = 2
id = 77
var3 = 5
id = 77
var4 = 5
解决方案
没有把握。Bash 脚本非常敏感。我猜你的触摸是导致这个问题的原因有几个。
首先,每当您触摸文件名时,它不应包含操作数或前缀 unliss 它是 shell 脚本的一部分,而 $filename 是 shell 或内联块引号。Touch 通常用于二进制文件或高优先级数据对象。
其次,我会尝试更改输入并调整为 $done ,而不是使用 esac 回显 $line 回显整个脚本,或者使用 end if 而不是 do while 循环。
推荐阅读
- reactjs - 如何使用 Redux 在 React 应用程序中跟踪正确答案
- anylogic - 我如何夺取一部分被夺取的资源?
- reactjs - 按下 Enter 键时如何将焦点更改为另一个组件
- dependencies - 如果使用 for_each 进行迭代,为什么自动缩放组创建需要两次 terraform 运行?
- python - 在 QListView 中将 QCheckBox 定位在项目的左上角
- python - 生成字符串排列列表的问题
- sql-server - SSIS 包 - 通过 SQL 作业代理触发脚本任务时不会执行
- javascript - 如何使用 Nightmare.js 滚动到页面底部
- vb.net - VB HtmlAgilityPack 加入字符串节点,忽略节点未找到
- jenkins - 如何为詹金斯管道声明性定义工作区体积