package cmd import ( "github.com/spf13/cobra" ) func createWriteCmd() *cobra.Command { var cmdWrite = &cobra.Command{ Use: "write [yaml_file] [path_expression] [value]", Aliases: []string{"w"}, Short: "yq w [--inplace/-i] [--script/-s script_file] [--doc/-d index] sample.yaml 'b.e(name==fr*).value' newValue", Example: ` yq write things.yaml 'a.b.c' true yq write things.yaml 'a.*.c' true yq write things.yaml 'a.**' true yq write things.yaml 'a.(child.subchild==co*).c' true yq write things.yaml 'a.b.c' --tag '!!str' true # force 'true' to be interpreted as a string instead of bool yq write things.yaml 'a.b.c' --tag '!!float' 3 yq write --inplace -- things.yaml 'a.b.c' '--cat' # need to use '--' to stop processing arguments as flags yq w -i things.yaml 'a.b.c' cat yq w -i -s update_script.yaml things.yaml yq w things.yaml 'a.b.d[+]' foo # appends a new node to the 'd' array yq w --doc 2 things.yaml 'a.b.d[+]' foo # updates the 3rd document of the yaml file `, Long: `Updates the yaml file w.r.t the given path and value. Outputs to STDOUT unless the inplace flag is used, in which case the file is updated instead. Append value to array adds the value to the end of array. Update Scripts: Note that you can give an update script to perform more sophisticated update. Update script format is list of update commands (update or delete) like so: --- - command: update path: b.c value: #great things: frog # wow! - command: delete path: b.d `, RunE: writeProperty, } cmdWrite.PersistentFlags().BoolVarP(&writeInplace, "inplace", "i", false, "update the yaml file inplace") cmdWrite.PersistentFlags().StringVarP(&writeScript, "script", "s", "", "yaml script for updating yaml") cmdWrite.PersistentFlags().StringVarP(&sourceYamlFile, "from", "f", "", "yaml file for updating yaml (as-is)") cmdWrite.PersistentFlags().StringVarP(&customTag, "tag", "t", "", "set yaml tag (e.g. !!int)") cmdWrite.PersistentFlags().StringVarP(&docIndex, "doc", "d", "0", "process document index number (0 based, * for all documents)") cmdWrite.PersistentFlags().StringVarP(&customStyle, "style", "", "", "formatting style of the value: single, double, folded, flow, literal, tagged") cmdWrite.PersistentFlags().StringVarP(&anchorName, "anchorName", "", "", "anchor name") cmdWrite.PersistentFlags().BoolVarP(&makeAlias, "makeAlias", "", false, "create an alias using the value as the anchor name") return cmdWrite } func writeProperty(cmd *cobra.Command, args []string) error { var updateCommands, updateCommandsError = readUpdateCommands(args, 3, "Must provide ", true) if updateCommandsError != nil { return updateCommandsError } return updateDoc(args[0], updateCommands, cmd.OutOrStdout()) }