“key = value”行:如何替换特定键的值?

“key = value”行:如何替换特定键的值?

我想找到文件中表达式的右侧,并使用sed.有了grep,我们看到

$ grep power TheFile 
power                 = 1

另外cut,我可以访问该值

$ grep power TheFile  | cut -d = -f 2
 1

但是,我不知道如何使用该sed命令进行管道传输。有什么想法可以实现这一点吗?

答案1

怎么样:

sed '/^power /s/=.*$/= your-replacement/' TheFile
  1. /^power /是一个地址说明符,在本例中查找与 regex 匹配的行^power

  2. s是一个替换命令,匹配正则表达式,即=.

  3. 请注意,不需要通过管道传输文件的内容;您可以将其(或文件列表)指定为命令参数。如果您想要/需要将某些内容通过管道传输到 中sed,那很简单 - 只需| sed ..

  4. 如果紧接在第一个单词(例如 )之后的空格power可能是制表符,请改用[[:blank:]]。某些版本sed允许您使用\t明确的制表符。

答案2

要查找TheFile其中以单词开头,power后跟一定量的空格和等号的行,并将等号后面的内容替换为something

sed -E 's/^(power[[:blank:]]*=[[:blank:]]*).*/\1something/' TheFile

[[:blank:]]*匹配零个或多个空格或制表符。这保留了 之前和之后的空白=。替换文本中的\1将会插入与第一个括号匹配的字符串部分。

要使用 GNU 等进行更改sed,请添加该-i标志,否则,将输出重定向到新文件。

测试它:

$ cat TheFile
power                 = 1
power123              = 1
power  123            = 1
power                 =
power                 =                 112

$ sed -E 's/^(power[[:blank:]]*=[[:blank:]]*).*/\1something/' TheFile
power                 = something
power123              = 1
power  123            = 1
power                 =something
power                 =                 something

相关内容