【问题标题】:Replace line with space and backslash with a string containing spaces用空格替换行,用包含空格的字符串替换反斜杠
【发布时间】:2018-05-28 05:52:14
【问题描述】:

我想替换下面这行:

--memory 20g \

--memory 100g \

实际上它应该替换--memory之后的任何数字。以下是我所拥有的,但无法获得预期的结果。

sed -i -E -- "s/\b--memory.*/--memroy 100g \/g"  a.txt

【问题讨论】:

    标签: linux unix sed


    【解决方案1】:

    您在这里不需要扩展正则表达式支持 (-E),您可以按照以下方式进行 POSIX-ly。这个想法是您需要双重转义元字符 \ 以使其成为文字

    sed 's/--memory \(.*\) \\/--memory 100g \\/g' a.txt
    

    或者如果你确定它一直是20g,直接使用字符串。

    sed 's/--memory 20g \\/--memory 100g \\/g' a.txt
    

    使用\(.*\) 的一个优点是允许您替换该位置可能发生的任何事情。 .* 是一个匹配任何东西的贪婪表达式,在 POSIX sed(基本正则表达式)中,您需要将捕获的组转义为 \(.*\),而如果您在启用 -E 标志的情况下执行相同操作(在 GNU/ FreeBSD sed) 你可以这样做 (.*)。如果您想匹配确切的行并且不让sed 在您不需要的地方替换文本,也可以使用正则表达式锚^$。与 ERE 相同的操作

    sed -E 's/--memory (.*) \\/--memory 100g \\/g' file
    

    【讨论】:

    • 感谢 Inian... 现在可以正常工作了!
    • @Inian:你能解释一下这部分吗:\(.*\)请在你给出的答案中。
    • @User123:这对你有帮助吗?
    • 这只是@jww 惯用的古怪技巧,即对他不喜欢的问题的每个答案都投反对票。
    • @EdMorton :这次不是 Ed,我在他的问题中标记了元帖子。模组会看看他的行为。感谢您的补充埃德。是时候有人警告他的行为了
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2016-12-18
    • 2021-03-28
    • 2018-01-29
    • 2021-10-08
    相关资源
    最近更新 更多