正则表达式使用sed替换特定字符串

时间:2012-12-26 08:46:19

标签: regex macos unix sed

我一直面临着使用sed使用正则表达式的问题。 我有一个字符串:

Call stack: [thread 0xac0aaa28]: | start | main main.m:37 | UIApplicationMain | GSEventRun | GSEventRunModal | CFRunLoopRunInMode | CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoSource1 | __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ | mshMIGPerform | _XCopyAttributeValue | _AXXMIGCopyAttributeValue | _copyAttributeValueCallback | -[NSObject(AXPrivCategory) accessibilityAttributeValue:] | -[UITableViewCellAccessibilityElement _accessibilityIsTableCell] | -[UITableViewCellAccessibilityElement tableViewCell] | -[UITableViewAccessibility(Accessibility) accessibilityCellForRowAtIndexPath:] | -[UITableView(UITableViewInternal) _createPreparedCellForRowAtIndexPath:] | -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] | -[MailViewController tableView:cellForRowAtIndexPath:] | +[NICellFactory tableViewModel:cellForTableView:atIndexPath:withObject:] NICellFactory.m:89 | +[NICellFactory cellWithClass:tableView:object:] NICellFactory.m:67 | -[SwipableTableViewCell shouldUpdateCellWithObject:] | -[SwipableTableViewCell updateCellWithObject:] | -[ThreadCellFrontView updateCellWithObject:] | -[ThreadSummaryView updateWithNugget:] | -[JavaUtilLinkedList init] LinkedList.m:49 | -[JavaUtilLinkedList initJavaUtilLinkedList] LinkedList.m:40 | +[NSObject alloc] | +[NSObject allocWithZone:] | _objc_rootAllocWithZone | class_createInstance | calloc | malloc_zone_calloc

其实例如main.m:37 |,LinkedList.m:95 |,NICellFactory.mm:89 |等等 即在文本配合中,我可以使用正则表达式匹配这些出现

[a-zA-z]+[.][m]+[:]+[0-9]+[ |]+

现在我尝试使用

在sed中做同样的事情
sed 's/\[a-zA-z]+[.][m]+[:]+[0-9][ |]+/ /g'

Sed似乎没有取代这些实例。 我也尝试过使用反冲 即

sed 's/\[a-zA-z\]+\[\.\]\[m\]+\[:\]+\[0-9\]+\[ |\]+/ /g'

仍然没有取代这种情况。

有人可以帮我理解我做错了什么吗?

由于

2 个答案:

答案 0 :(得分:1)

你没有充分理由添加的反斜杠就是问题所在。此外,您的sed方言可能不支持+重复开箱即用 - 请尝试使用*,或在-r-E选项中查找sed或{{1}} {1}}手册页。

答案 1 :(得分:1)

以下适用于我:

sed -i.bck  "s/[a-zA-Z][a-zA-Z]*\.mm*::*[0-9][0-9]*\s|/ /g"  prova_sed.txt

为了以防万一,它会创建一个备份文件。

5月sed似乎不支持+,\ w和\ d语法,因此我使用了[a-ZA-Z][a-zA-Z]*代替[a-zA-Z]+mm*代替{ {1}}等等。

另请注意,您无需在括号内放置单个字符,因此m+可以替换为[\.][m]+[:]+

如果您的sed版本支持-r选项,则可以将整个内容简化为

\.mm*::*