diff --git a/src/grep.rs b/src/grep.rs index ccd47ec..6c4d441 100644 --- a/src/grep.rs +++ b/src/grep.rs @@ -8,6 +8,7 @@ use std::fs::{self, File}; fn main(){ let args: Vec = env::args().collect(); let mut pattern_and_filename: Vec = Vec::new(); // 0 - pattern, 1 - name of files + let mut invert: bool = false; for arg in 1..args.len() { match args[arg].as_str() { @@ -16,6 +17,9 @@ fn main(){ println!("Print lines matching a pattern"); return; }, + "-v" => { + invert = true; + }, arg => { if args.len() < 3 { println!("grep: Not enought arguments"); @@ -28,16 +32,18 @@ fn main(){ let pattern = &pattern_and_filename[0]; let filename = &pattern_and_filename[1]; let contents = fs::read_to_string(&filename); - //contents = "".to_string(); - for line in search(pattern.to_string(), contents.unwrap().as_str()) { + for line in search(pattern.to_string(), contents.unwrap().as_str(), invert) { println!("{}", line); } } -fn search<'a>(pattern: String, contents: &'a str) -> Vec<&'a str> { +fn search<'a>(pattern: String, contents: &'a str, invert: bool) -> Vec<&'a str> { let mut results = Vec::new(); for line in contents.lines() { - if line.contains(&pattern) { + if line.contains(&pattern) && !invert { + results.push(line); + } + else if !line.contains(&pattern) && invert { results.push(line); } }