From a8cb8a2626159295cf5bb07f72527d215f5ef84e Mon Sep 17 00:00:00 2001 From: g1n Date: Thu, 22 Jul 2021 10:39:11 +0000 Subject: [PATCH] Add not builtin command - grep --- src/grep.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/grep.rs diff --git a/src/grep.rs b/src/grep.rs new file mode 100644 index 0000000..ccd47ec --- /dev/null +++ b/src/grep.rs @@ -0,0 +1,45 @@ +use std::env; +use std::fs::{self, File}; +//use std::path::Path; +//use std::io::BufReader; +//use std::io::stdout; +//use std::io::prelude::*; + +fn main(){ + let args: Vec = env::args().collect(); + let mut pattern_and_filename: Vec = Vec::new(); // 0 - pattern, 1 - name of files + + for arg in 1..args.len() { + match args[arg].as_str() { + "--help" => { + println!("Usage: grep [OPTIONS] FILE"); + println!("Print lines matching a pattern"); + return; + }, + arg => { + if args.len() < 3 { + println!("grep: Not enought arguments"); + return; + } + pattern_and_filename.push(arg.to_string()); + }, + } + } + 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()) { + println!("{}", line); + } +} + +fn search<'a>(pattern: String, contents: &'a str) -> Vec<&'a str> { + let mut results = Vec::new(); + for line in contents.lines() { + if line.contains(&pattern) { + results.push(line); + } + } + results +}