2017-08-14 60 views
2

我有一个日志文件,我试图整理它以使用一些数据。 我想使用类似sed 's/foo//g'的东西,不同之处在于不是匹配单词foo,而是希望它从foo删除所有内容,直到下一个空格。Unix - 删除与正则表达式匹配的部分

我尝试(没有成功):

sed -e -- 's/(?<=foo)(.*)(?=)//g'

任何想法?

回答

1

我希望它从foo删除一切,直到下一个空间。

您可以使用:

sed 's/foo[^[:blank:]]*//g' file 

[^[:blank:]]将匹配这不是一个空间,而不是一个标签的任何字符。

+1

谢谢!像魅力一样工作。非常聪明的否定。 –

1

我会做这样的:

foo\S*(?=\s) 

\S是一个非空白字符。它有一个积极的向前看,这不是比赛的一部分,所以你可以删除整个比赛。 Demo

编辑:其实,它更容易,更好地与一个单词边界:

foo\S*\b 

Demo。现在foobar也可以在线的末尾。