我想找到文件中表达式的右侧,并使用sed
.有了grep
,我们看到
$ grep power TheFile
power = 1
另外cut
,我可以访问该值
$ grep power TheFile | cut -d = -f 2
1
但是,我不知道如何使用该sed
命令进行管道传输。有什么想法可以实现这一点吗?
答案1
怎么样:
sed '/^power /s/=.*$/= your-replacement/' TheFile
/^power /
是一个地址说明符,在本例中查找与 regex 匹配的行^power
。s
是一个替换命令,匹配正则表达式,即=
.请注意,不需要通过管道传输文件的内容;您可以将其(或文件列表)指定为命令参数。如果您想要/需要将某些内容通过管道传输到 中
sed
,那很简单 - 只需| sed ..
。如果紧接在第一个单词(例如 )之后的空格
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