我想在sed
中使用正则表达式替换字符串。现在,我知道sed
的行为在Mac上很时髦。当我想要检查一行中的某个模式时,我经常看到使用egrep
的变通方法。但是,在这种情况下,我想做字符串替换。
我想将cp an
和cp <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上。
答案 0 :(得分:1)
在OSX上,以下命令可用于扩展正则表达式支持:
sed -i.backup -E 's/cp[[:blank:]]+an/gggg/g'
答案 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.
。)