让我们假设一个文件包含以下行:
PARAMETER = 10 # Comment ....
在Bash脚本中,我通常使用
修改PARAMETER值。sed -i "s/PARAMETER = .*/PARAMETER = 20/" FILE
但这会在以后删除注释。有保留建议吗?
答案 0 :(得分:4)
.*
的意思是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
答案 1 :(得分:0)
您需要与以下任何评论相匹配。
sed -i "s/PARAMETER = [0-9]*\(.*\)/PARAMETER = 20 \1/" FILE