2012-12-26 363 views
0

我一直在使用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 |等 即在文本的隊友,我可以當我嘗試做同樣的事情在sed使用

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

桑達似乎並沒有更換這些實例使用正則表達式

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

現在符合這些出現次數。 我已經使用過的晃動即

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

還是sed的不替代這種OCCURENCES嘗試。

有人可以幫助我瞭解我做錯了什麼?

謝謝

回答

1

您添加的反斜槓沒有很好的理由是問題所在。您的sed方言可能不支持+開箱即用 - 請嘗試用*代替,或在sed手冊頁中查找-r-E選項。

1

對我來說,以下工作:

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

它創建一個備份文件,以防萬一。

sed似乎並不支持+,\ w和\ d語法所以我用[a-ZA-Z][a-zA-Z]*代替[a-zA-Z]+m+mm*代替等。

另外請注意,你不需要把單個字符括號內使[\.][m]+[:]+可以\.mm*::*

被替換如果你的sed的版本支持-r選項,整個事情就可以簡化成

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