【问题标题】:Regex replacement of a specific string using sed使用 sed 正则表达式替换特定字符串
【发布时间】:2012-12-26 08:46:18
【问题描述】:

我在 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 | 等实例ETC 即在文本伴侣中,我可以使用正则表达式匹配这些出现

[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'

仍然 sed 不能替代此类事件。

谁能帮我理解我做错了什么?

谢谢

【问题讨论】:

    标签: regex macos unix sed


    【解决方案1】:

    您无缘无故添加的反斜杠是问题所在。此外,您的sed 方言可能不支持开箱即用的+ 重复 - 请尝试使用*,或者在您的sed 手册页中查找-r-E 选项。

    【讨论】:

      【解决方案2】:

      以下对我有用:

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

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

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

      另外请注意,您不需要将单个字符放在括号内,因此 [\.][m]+[:]+ 可以替换为 \.mm*::*

      如果你的 sed 版本支持 -r 选项,整个事情可以简化为

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

      【讨论】:

        猜你喜欢
        • 2021-11-20
        • 2012-12-13
        • 1970-01-01
        • 2019-10-10
        • 1970-01-01
        • 2013-02-21
        • 2016-08-16
        • 2018-02-09
        • 1970-01-01
        相关资源
        最近更新 更多