【问题标题】:grep text after keyword with unknown spaces and remove comments带有未知空格的关键字后的 grep 文本并删除注释
【发布时间】:2018-06-05 20:05:59
【问题描述】:

我无法使用 grep/sed/awk 从文件中保存变量。 file.txt 中的文本格式为:

NUM_ITER                = 1000 # Number of iterations
NUM_STEP               = 1000

我想在没有 cmets 的情况下将这些保存到 bash 变量中。

到目前为止,我已经尝试过:

grep -oP "^NUM_ITER[ ]*=\K.*#" file.txt

产生

 1000 #

有什么建议吗?

【问题讨论】:

    标签: bash


    【解决方案1】:

    我会使用awk,像这样:

    awk -F'[=[:blank:]#]+' '$1 == "NUM_ITER" {print $2}' file
    

    将其存储在变量中:

    NUM_ITER=$(awk -F'[=[:blank:]#]+' '$1 == "NUM_ITER" {print $2}' file)
    

    【讨论】:

      【解决方案2】:

      只要一行只能包含一个匹配项,使用sed 很容易。

      sed -n '# Remove comments
              s/[ ]*#.*//
              # If keyword found, remove keyword and print value
              s/^NUM_ITER[ ]*=[ ]*//p' file.txt
      

      如果您移除 cmets,则可以将其缩减为单线。

      sed -n 's/[ ]*#.*//;s/^NUM_ITER[ ]*=[ ]*//p' file.txt
      

      -n 选项关闭打印,最后替换后的 /p 标志表示只有在替换成功时才打印该行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-27
        • 2015-02-01
        • 2012-07-05
        • 2023-03-25
        • 1970-01-01
        相关资源
        最近更新 更多