我想在文件中找到表达式的右侧,并使用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)
/^power /是地址说明符,在本例中查找与 regex 匹配的行^power。
s是一个替换命令,匹配一个正则表达式是=.
请注意,不需要通过管道传输文件内容;您可以将它(或文件列表)指定为命令参数。如果你想/需要管到的东西sed,这很简单-只| sed ..。
如果紧接在初始单词之后的空格(例如power)可能是制表符,请[[:blank:]]改用。的某些版本sed允许您使用\t明确的制表符。
查找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)