Regex
use std::env; use std::fs; use std::process; use anyhow::Result; use regex::Regex; fn main() -> Result<()> { let args : Vec<String> = env::args().collect(); let filename = match args.get(1) { None => { eprintln!("Invalid argument"); process::exit(1); }, Some(n) => { n } }; let pattern = args[2].clone(); let repl = args[3].clone(); let in_contents = fs::read_to_string(filename)?; let re = Regex::new(&pattern)?; let out_contents = re.replace_all(&in_contents, &repl).to_string(); println!("{}", out_contents); let pattern = "^([^:]*):"; let re = Regex::new(pattern)?; for line in out_contents.split('\n') { let res = match re.captures(line) { None => continue, Some(v) => v, }; println!("{}", &res[1]); } Ok(()) }
To test:
cargo r --bin test000 /etc/passwd mycroft testaroo