在下面的文件中,我必须将“100”替换为变量中存储的值。
文件.txt:
dropNumber = 100
patchNumber = 8.8.0.80
randomNumber = 10000
versionCode = dropNumber + patchNumber
尝试了一些失败的选项:1)
NEW_DROP_NUMBER=200
OLD_DROP_NUMBER=$(cat file.txt | grep dropNumber | head -1 | sed 's/^.*= //')
echo "Drop Number: $NEW_DROP_NUMBER" | awk -v srch="$OLD_DROP_NUMBER" -v repl="$NEW_DROP_NUMBER" '{ sub(srch,repl,$0); print $0 }' file.txt > file.txt && mv properties.tmp file.txt
这种方法也替换了 randomNumber 的值,这不是有意的。
2)
sed -i -e 's/$OLD_DROP_NUMBER/$NEW_DROP_NUMBER/g' file.txt
这将返回错误“sed:s/100/200/g:没有这样的文件或目录”
有人可以帮助设计命令以仅替换期望值吗?
答案1
awk 程序包括模式{动作}对:如果您不提供图案, 然后行动将应用于每条记录。在您的情况下,您可以添加一个模式以仅匹配以 开头的记录(行)dropNumber
:
awk ... '/^dropNumber/ { sub(srch,repl,$0) } { print }' ...
与 Sed 类似,使用正则表达式地址只有所需的行:
sed "/^dropNumber/s/$OLD_DROP_NUMBER/$NEW_DROP_NUMBER/"
(请注意,您将需要双引号来代替问题中显示的单引号,否则 shell 变量将被视为字符串文字)。