【问题标题】:Print specific string in a line after matched word in bash [duplicate]在bash中匹配单词后的一行中打印特定字符串[重复]
【发布时间】:2019-03-04 12:35:51
【问题描述】:

情况 有一个名为 test 的文件,包含以下文本:

this is the first line
version=1.2.3.4
this is the third line

如何仅通过 bash 打印:

1.2.3.4

注意:我希望一直打印到行尾 "version=" 之后的内容,而不是搜索 1.2.3.4 谢谢

【问题讨论】:

    标签: regex bash grep cat


    【解决方案1】:

    使用 GNU grep

    grep -Po '^version=\K.*'
    

    -P 启用 PCRE 正则表达式,-o 用于仅显示匹配的内容而不是整行,\K 元字符指定不显示前面的内容。

    使用sed

    sed -n 's/^version=\(.*\)/\1/p'
    

    -n 禁用自动打印,然后替换命令将通过捕获组仅替换 "version=[...]" 行的末尾。替换只对第二行有效,触发p 指令打印(转换后的)行。

    【讨论】:

    • 为了确保字符串 "version=" 隐藏在其他地方,使用 ^version 查找行首的出现可能是有意义的
    • @Olli 对,已编辑。谢谢!
    【解决方案2】:

    你可以使用:

    grep version file | cut -d\= -f2
    

    【讨论】:

    • 不用转义=AFAIK,对于bashcut都没有特殊意义
    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2019-06-28
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 2014-12-03
    相关资源
    最近更新 更多