【问题标题】:regex to select before semi colon在分号之前选择的正则表达式
【发布时间】:2021-10-23 20:32:56
【问题描述】:

输入字符串

key=value ; export key

只想选择value

正则表达式[^=]*; 给予包括;。我怎样才能删除它?

sed '/key/ s/[^=]*;/myValue/' fileName

上面的命令是否可以将value 替换为myValue 在具有key 的行中?

【问题讨论】:

    标签: regex linux sed


    【解决方案1】:

    你可以使用

    sed 's/\(key=\)[^; ]*/\1myValue/' file > newfile
    

    \(key=\)[^; ]* 模式匹配并捕获第 1 组中的 key= 子字符串,然后匹配除空格和分号之外的任何零个或多个字符。替换模式中的\1 指的是Group 1 的值,所以key= 会保留在结果中。

    this online demo:

    #!/bin/bash
    s='key=value ; export key'
    sed 's/\(key=\)[^; ]*/\1myValue/' <<< "$s"
    # => key=myValue ; export key
    

    【讨论】:

    • [^; ]* 表示阅读之前的所有内容; ?你能解释一下吗?
    • @FreshTransistor [^; ]* = [^; ] - 除了; 和空格之外的任何字符,* - 零次或多次。
    【解决方案2】:

    似乎您正在寻找:

     sed -E '/^key=/s/=[^;]*/=myvalue/'
    

    【讨论】:

    • 不要。使用自动化工具链来编辑文件是一个糟糕的主意。将您的输出写入另一个文件。如果需要,将文件移到第一个上(但也不要这样做)。如果你想忽略好的建议和积累的最佳实践,你可以使用sed -i。但是不要。真的。这似乎是一个简单的短期解决方案,但它会在未来造成巨大的痛苦。
    • 我想继续更新这个 myValue 并在 shell 脚本中使用它以供我进一步参考。如果编辑文件不好,你会建议什么?
    • 听起来你想让myValue 成为脚本的参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多