# Keys Use the `keys` operator to return map keys or array indices. {% hint style="warning" %} Note that versions prior to 4.18 require the 'eval/e' command to be specified. `yq e ` {% endhint %} ## Map keys Given a sample.yml file of: ```yaml dog: woof cat: meow ``` then ```bash yq 'keys' sample.yml ``` will output ```yaml - dog - cat ``` ## Array keys Given a sample.yml file of: ```yaml - apple - banana ``` then ```bash yq 'keys' sample.yml ``` will output ```yaml - 0 - 1 ``` ## Retrieve array key Given a sample.yml file of: ```yaml - 1 - 2 - 3 ``` then ```bash yq '.[1] | key' sample.yml ``` will output ```yaml 1 ``` ## Retrieve map key Given a sample.yml file of: ```yaml a: thing ``` then ```bash yq '.a | key' sample.yml ``` will output ```yaml a ``` ## No key Given a sample.yml file of: ```yaml {} ``` then ```bash yq 'key' sample.yml ``` will output ```yaml ``` ## Update map key Given a sample.yml file of: ```yaml a: x: 3 y: 4 ``` then ```bash yq '(.a.x | key) = "meow"' sample.yml ``` will output ```yaml a: meow: 3 y: 4 ``` ## Get comment from map key Given a sample.yml file of: ```yaml a: # comment on key x: 3 y: 4 ``` then ```bash yq '.a.x | key | headComment' sample.yml ``` will output ```yaml comment on key ``` ## Check node is a key Given a sample.yml file of: ```yaml a: b: - cat c: frog ``` then ```bash yq '[... | { "p": path | join("."), "isKey": is_key, "tag": tag }]' sample.yml ``` will output ```yaml - p: "" isKey: false tag: '!!map' - p: a isKey: true tag: '!!str' - p: a isKey: false tag: '!!map' - p: a.b isKey: true tag: '!!str' - p: a.b isKey: false tag: '!!seq' - p: a.b.0 isKey: false tag: '!!str' - p: a.c isKey: true tag: '!!str' - p: a.c isKey: false tag: '!!str' ```