我正在解析以下格式的简单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)