我想在文件中找到表达式的右侧,并使用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)