awk:设置所需的列数?

awk:设置所需的列数?

我正在解析以下格式的简单conf文件:

key = value

为此,我使用awk类似

KEY=$(awk -F' *= *' '/^key/{print $2}' file.conf)

但是,某些值可能包含=符号,所以我想要的基本上是告诉awk我只需要两列,即强制它接受第一个分隔符之后遇到的所有内容作为一列。我没有找到这样的选项。我怎样才能做到这一点?

答案1

如果分隔符可以出现在字段内,那么它就不是真正的分隔符。我会用类似的东西

KEY=$(sed -n '/^key *=/ { s/^key *= *//; p }' file.conf)

相反:这会查找以 开头的行,key后跟任意数量的空格和一个=符号,删除该行的开头并打印它。作为戴夫·汤普森_085指出p可以以 为条件s

KEY=$(sed -n 's/^key *= *//p' file.conf)

等效的 AWK 是

KEY=$(awk '/^key *=/ { sub("^key *= *", ""); print }' file.conf)

可以使用相同的组合技巧:

KEY=$(awk 'sub("^key *= *", "")' file.conf)

答案2

只是另一种变体,这次是使用 grep:

KEY=$(grep -Po  '^key\s*=\s*\K.*'  f.conf )

答案3

只需取出第一列值

KEY=$(awk -F= '{$1="";sub("=","")}1' OFS="=" file.conf)

答案4

您可以使用以下命令获得您想要的内容:

KEY=$(awk -F 'key *= *' '{print $2}' f.conf)

相关内容