Expand description
§hq
hq is a command-line HCL processor.
§install
This will install an hq binary on your system:
$ cargo install hq-rs§usage
Here is an example HCL file:
some_attr = {
foo = [1, 2]
bar = true
}
some_block "some_block_label" {
attr = "value"
}
some_block "another_block_label" {
attr = "another_value"
}You can query the attribute(s) and block(s) in an HCL file like so:
$ cat example.hcl | hq '.some_attr'{
foo = [
1,
2
]
bar = true
}$ cat example.hcl | hq '.some_attr.foo'[
1,
2
]$ cat example.hcl | hq '.some_block'some_block "some_block_label" {
attr = "value"
}
some_block "another_block_label" {
attr = "another_value"
}$ cat example.hcl | hq '.some_block{"some_block_label"}.attr'"value"$ cat example.hcl | hq '.some_block{"another_block_label"}.attr'"another_value"Or read directly from a file by passing read -f:
$ hq read -f example.hcl '.some_block'some_block "some_block_label" {
attr = "value"
}
some_block "another_block_label" {
attr = "another_value"
}You can modify HCL (even HCL that is formatted and contains comments) like so:
$ cat example.hcl | hq write '.fmt_block.first_formatted_field="something_new"'some_attr = {
foo = [1, 2]
bar = true
}
some_block "some_block_label" {
attr = "value"
}
some_block "another_block_label" {
attr = "another_value"
}
# this is a block comment
fmt_block "fmt_label" {
# this is a body comment
# this is another body comment
# this is a third body comment
first_formatted_field = "something_new"
second_formatted_field = "second_value"
}
nested_block {
inner_block {
value = "deep"
another_value = "nested"
}
}Modifications can also be written directly to a file by passing -i/--inline
and -f/--file:
$ hq write -i -f example.hcl '.fmt_block.first_formatted_field="something_written_inline"'$ hq read -f example.hcl .fmt_block.first_formatted_field
"something_written_inline"You can delete entries in an HCL file like so:
$ cat example.hcl | hq delete '.nested_block.inner_block.value'some_attr = {
foo = [1, 2]
bar = true
}
some_block "some_block_label" {
attr = "value"
}
some_block "another_block_label" {
attr = "another_value"
}
# this is a block comment
fmt_block "fmt_label" {
# this is a body comment
# this is another body comment
# this is a third body comment
first_formatted_field = "fmt_value"
second_formatted_field = "second_value"
}
nested_block {
inner_block {
another_value = "nested"
}
}Or you can delete entries from a file by passing -i/--inline and -f/--file:
$ hq delete -i -f example.hcl '.nested_block.inner_block.another_value'Re-exports§
pub use filter::parser;pub use filter::parser::parse_filter;pub use query::query;pub use write::write;pub use delete::delete;