【问题标题】:How to delete all text appearing between two symbols with sed?如何使用sed删除两个符号之间出现的所有文本?
【发布时间】:2012-10-03 15:37:01
【问题描述】:

我有一个这样的文件:

bear/forest/\AAA mountains/fish/
fish/\AAA stream/river/\AAA shrimp/
llama/mountains/

我想删除出现在 2 个 / 之间的任何文本,其中出现了 \AAA,例如,上面将变为:

bear/forest/fish/
fish/river/
llama/mountains/

AAA 总是出现在第一个 / 符号之后。

我尝试进行查找和替换,匹配模式/\AAA*/ 并将其替换为/,但这不起作用:

sed -i -r 's/\/\\AAA*\//\//g' file.txt

我有 GNU sed 4.2.1 版。

【问题讨论】:

  • * 是一个元字符,表示零个或多个前面的字符或组。所以A* 表示零个或多个A。您必须提供 \(AAA\)* 来表示零个或多个 AAA。但是您的意图是[/][^/]*AAA[^/]*[/]

标签: sed


【解决方案1】:

只需删除/\AAA/ 之间的所有内容。如果模式或替换包含/,则使用替代字符分隔模式可提高可读性:

sed 's,/\\AAA[^/]*/,/,g'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-20
    • 2010-09-30
    • 2015-11-10
    • 1970-01-01
    • 2021-05-26
    • 2020-06-22
    • 1970-01-01
    相关资源
    最近更新 更多