用于删除所有字符串的正则表达式以run开头并以以下结尾:

时间:2016-08-09 08:02:58

标签: regex sed

日志:

runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> Suresh :: Age ==>> 21 ::

正则表达式:

sed 's/run* ==>> [0-9]* //g' -i sample.log

它不起作用。我想用run

删除所有字符串

预期产出:

Name ==>> Suresh :: Age ==>> 21 ::

请帮忙。

2 个答案:

答案 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 ::