我有一些配置文件,比如示例
A_place = 10km
B_place=5km
#A_place=2km
C_place=1km
我想更改未注释行中的a_place值。有些线可能有初始空格。我尝试了一个基本的
sed
命令来查找和替换它,但是没有成功。也许我应该使用AWK
而不是流编辑器? 最佳答案
使用sed:sed -e '/#/!s/\(A_place[[:space:]]*=[[:space:]]*\)\(.*\)/\1"new_value"/' input
这里正在做的事情的细目:
跳过注释行:
/#/啊!
然后是形式上的替换
S/旧/新/
选择旧字符串,并将原始字符串放在parens(反向引用)中,以便以后可以通过指定-1来保留它。这与字符串“a_place”匹配,后跟零个或多个空白字符,后跟等号,后跟零个或多个空白字符。请注意,要替换的值也在parens中,并且可以由\2引用;这里不需要它,可以不使用parens。所以要匹配的旧字符串是:
(a_place[[:space:]*=[[:space:]*)(*)
然后,使用“\1”backref创建要输出的新行,保留等号周围的空白,并附加“new value”,这里用引号表示清楚,这是新行中的文字,但可能不希望出现在最终输出中。\ 1“这是在第一个paren分隔的regex中匹配的所有内容,包括等号周围的任何空格:
\ 1“新价值”
关于linux - 使用sed或awk替换参数值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48043172/