首页 > 解决方案 > BASH:更改一行中的单个变量

问题描述

假设一个文件包含以下行:

PARAMETER = 10   # Comment ....

在 Bash 脚本中,我通常使用

sed -i "s/PARAMETER = .*/PARAMETER = 20/" FILE

但这会删除之后的评论。有什么保留它的建议吗?

标签: bashsed

解决方案


.*意味着any character, reapeated any amount of time。按照这个逻辑,#属于这一类,将被捕获。

为了避免这种情况,最简单的技术是使用否定字符类,即写any character that isn't in a set of specific chracters

语法是[^<any character you don't want>]

你可以写:

sed -i "s/PARAMETER = [^#]*/PARAMETER = 20 /" FILE

推荐阅读