1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
//! //! the substitude text program. //! //! ```text //! Usage: //! aki-gsub \[options\] //! //! replace string by rust lang. //! //! Options: //! -e, --expression <exp> regular expression //! -f, --format <fmt> replace format //! -n, --quiet no output unmach lines //! //! -H, --help display this help and exit //! -V, --version display version information and exit //! ``` //! //! # Examples //! //! command line: //! ```text //! echo "abcabca" | aki-gsub -e "a(b)c" -f "*\$1*" //! ``` //! //! result output: //! ```text //! *b**b*a //! ``` //! //! See [`fn execute()`] for this library examples. //! //! [`fn execute()`]: crate::execute //! #[macro_use] extern crate anyhow; mod conf; mod run; mod util; use flood_tide::HelpVersion; use runnel::StreamIoe; use std::io::Write; const TRY_HELP_MSG: &str = "Try --help for help."; /// /// execute gsub /// /// params: /// - sioe: stream in/out/err /// - program: program name. etc. "gsub" /// - args: parameter arguments. /// /// return: /// - ok: () /// - err: anyhow /// /// example: /// /// ```rust /// use runnel::StreamIoe; /// use runnel::medium::stdio::{StdErr, StdIn, StdOut}; /// /// let r = libaki_gsub::execute(&StreamIoe { /// pin: Box::new(StdIn::default()), /// pout: Box::new(StdOut::default()), /// perr: Box::new(StdErr::default()), /// }, "gsub", &["-e", "a(b)c", "-f", "$1"]); /// ``` /// pub fn execute(sioe: &StreamIoe, prog_name: &str, args: &[&str]) -> anyhow::Result<()> { let conf = match conf::parse_cmdopts(prog_name, args) { Ok(conf) => conf, Err(errs) => { for err in errs.iter().take(1) { if err.is_help() || err.is_version() { let _r = sioe.pout.lock().write_fmt(format_args!("{}\n", err)); return Ok(()); } } return Err(anyhow!("{}\n{}", errs, TRY_HELP_MSG)); } }; run::run(sioe, &conf) }