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

mah*_*ood 8 sed

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

$ grep power TheFile 
power                 = 1
Run Code Online (Sandbox Code Playgroud)

同样使用cut,我可以访问该值

$ grep power TheFile  | cut -d = -f 2
 1
Run Code Online (Sandbox Code Playgroud)

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

use*_*316 10

怎么样:

sed '/^power /s/=.*$/= your-replacement/' TheFile
Run Code Online (Sandbox Code Playgroud)
  1. /^power /是地址说明符,在本例中查找与 regex 匹配的行^power

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

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

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


Kus*_*nda 5

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

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

[[: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
Run Code Online (Sandbox Code Playgroud)