次の形式で単純なconfファイルを解析しています。
key = value
これを行うには、awk
次のようなものを使用します。
KEY=$(awk -F' *= *' '/^key/{print $2}' file.conf)
ただし、一部の値には記号を含めることができるので、基本的に私が望むのは2つの列だけが欲しいと=
言うことです。つまり、最初の区切り文字の後に出会うすべてを1つの列として受け入れるように強制することです。awk
そのようなオプションが見つかりませんでした。どうすればいいですか?
答え1
フィールドに区切り文字が表示される場合、これは実際の区切り文字ではありません。私は次のようなものを使用します。
KEY=$(sed -n '/^key *=/ { s/^key *= *//; p }' file.conf)
代わりに、これで始まる行を探し、key
その後にスペースと=
記号が続くものを見つけて、行の先頭を削除して印刷します。 〜のようにデイブ・トンプソン_085p
条件になる可能性があることを指摘してください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)