grep: add -v flag
This commit is contained in:
parent
9019b533a8
commit
34b8816899
14
src/grep.rs
14
src/grep.rs
|
@ -8,6 +8,7 @@ use std::fs::{self, File};
|
|||
fn main(){
|
||||
let args: Vec<String> = env::args().collect();
|
||||
let mut pattern_and_filename: Vec<String> = 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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue