日志:
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> Suresh :: Age ==>> 21 ::
正则表达式:
sed 's/run* ==>> [0-9]* //g' -i sample.log
它不起作用。我想用run
删除所有字符串预期产出:
Name ==>> Suresh :: Age ==>> 21 ::
请帮忙。
答案 0 :(得分:1)
由于n*
匹配0个或更多n
个符号,因此无法正常工作。如果您使用.*
,那么您可以删除过多的字符串。
我建议将*
替换为[^=]*
(将匹配除=
以外的零个或多个字符)并在末尾添加 *:: *
以删除{{ 1}}周围有空格:
::
请参阅this demo。
答案 1 :(得分:0)
您可以使用以下内容:
sed -r 's/.+?Name/Name/g'
.+?Name
查找包括姓名在内的任何内容。然后我们用Name
替换我们发现的所有内容,这意味着我们有效地摆脱了之前的部分。
请注意传递给sed
的选项:
-r use extended regular expressions in the script
示例数据:
$ cat m
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> Suresh :: Age ==>> 21 ::
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> foo :: Age ==>> 20 ::
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> bar :: Age ==>> 1 ::
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> baz :: Age ==>> 0 ::
示例输出:
$ cat m | sed -r 's/.+?Name/Name/g'
Name ==>> Suresh :: Age ==>> 21 ::
Name ==>> foo :: Age ==>> 20 ::
Name ==>> bar :: Age ==>> 1 ::
Name ==>> baz :: Age ==>> 0 ::