我有一些配置文件,比如示例

 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/

10-14 15:58
查看更多