如何让sed采用扩展的正则表达式?

时间:2015-12-19 06:21:28

标签: regex macos bash sed grep

我想在sed中使用正则表达式替换字符串。现在,我知道sed的行为在Mac上很时髦。当我想要检查一行中的某个模式时,我经常看到使用egrep的变通方法。但是,在这种情况下,我想做字符串替换。

我想将cp ancp <tab or newline> an替换为gggg。我尝试了以下内容,它可以在扩展正则表达式下工作:

sed -i'_backup' 's/cp\s+an/gggg/g'  

但当然这没有任何作用。我尝试了egrep ping,当然它选择cp <one or more space characters> an行。

如何使用扩展正则表达式让sed进行替换?或者使用正则表达式进行替换的更好方法是什么?

我在mac osx上。

2 个答案:

答案 0 :(得分:1)

在OSX上,以下命令可用于扩展正则表达式支持:

sed -i.backup -E 's/cp[[:blank:]]+an/gggg/g'

POSIX Character Class Reference

答案 1 :(得分:1)

由于您提到要处理$ echo $'cp\nancp an' | sed -E '/cp/{N; s/cp(\n|[[:blank:]])an/gggg/g;}' gggggggg ,因此您需要稍微哄一下。你的确切要求对我来说不是很清楚,但下面的例子说明sed可以轻松处理新行在“目标”正则表达式中的某些情况:

-E

(非Mac用户请注意:如果您的grep不支持-r,请尝试使用CustomObject *object= [[[yourArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"id == 10"]] lastObject]; // make changes in object. 。)