在具有未知空格的关键字后的grep文本并删除注释

时间:2018-06-05 10:24:29

标签: bash

我无法使用grep / sed / awk从文件中保存变量。 file.txt中的文本位于表单上:

NUM_ITER                = 1000 # Number of iterations
NUM_STEP               = 1000

我想将这些保存到没有评论的bash变量中。

到目前为止,我试过这个:

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

产生

 1000 #

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我会使用awk,如下所示:

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

将其存储在变量中:

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

答案 1 :(得分:0)

只要一行只能包含一个匹配项,sed就可以轻松完成。

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

如果您删除评论,可以将其缩小为一行。

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

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