https://github.com/thinkphp/grep
A simple command-line utility written in Rust, designed to search for a specific pattern in files within a directory (and its subdirectories). It mimics the functionality of the grep command, offering both case-sensitive and case-insensitive search modes
https://github.com/thinkphp/grep
grep grep-like grep-search grepping rust-lang
Last synced: 3 months ago
JSON representation
A simple command-line utility written in Rust, designed to search for a specific pattern in files within a directory (and its subdirectories). It mimics the functionality of the grep command, offering both case-sensitive and case-insensitive search modes
- Host: GitHub
- URL: https://github.com/thinkphp/grep
- Owner: thinkphp
- Created: 2024-12-30T22:05:23.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2025-01-08T11:46:44.000Z (5 months ago)
- Last Synced: 2025-01-17T09:12:22.662Z (5 months ago)
- Topics: grep, grep-like, grep-search, grepping, rust-lang
- Language: Rust
- Homepage:
- Size: 35.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Rust Grep Search
This is a simple command-line utility written in Rust, designed to search for a specific pattern in files within a directory (and its subdirectories). It mimics the functionality of the `grep` command, offering both case-sensitive and case-insensitive search modes.
## Features
- **Recursive Search**: The tool recursively searches through directories and subdirectories for the given pattern.
- **Case Sensitivity Option**: Supports case-sensitive and case-insensitive search modes.
- **File and Directory Support**: Handles both files and directories, printing matches found within the files.
- **UTF-8 Validation**: Skips files that are not valid UTF-8 encoded.## Requirements
- [Rust](https://www.rust-lang.org/): Ensure you have the latest stable version of Rust installed. You can install Rust by following the [official installation guide](https://www.rust-lang.org/tools/install).## Installation
1. **Clone the Repository**
First, clone the repository to your local machine:
```bash
git clone https://github.com/thinkphp/grep.git
cd grep
```2. **Build the Project**
Use Cargo to build the project:
```bash
cargo build
```This will compile the project and create a `rustgrep` binary inside the `target/debug` directory.
## Usage
### Command-Line Arguments
1. `pattern`: The text string or pattern to search for. (Required)
2. `path`: The directory to search in. (Optional, defaults to the current directory `.`)
3. `--ignore-case` (`-i`): A flag to perform a case-insensitive search. (Optional)### Examples
#### 1. Case-Sensitive Search (Default)
To search for the pattern `error` in the current directory:```bash
cargo run "error"
```#### 2. Case-Insensitive Search
To search for the pattern `create_folder` in the `/home/user/projects` directory, ignoring case:```bash
cargo run "create_folder" --path /home/user/projects --ignore-case
```#### 3. Searching a Specific Directory
To search for the pattern `fix` in the `/home/user/logs` directory:```bash
cargo run "fix" --path /home/user/logs
```## How It Works
1. **Recursive Directory Search**: The program searches through the specified directory and its subdirectories.
2. **UTF-8 Validation**: The program reads files as raw bytes and attempts to convert them into valid UTF-8 strings. Files that cannot be decoded as UTF-8 are skipped with a warning.
3. **Search Modes**: The search can be case-sensitive or case-insensitive based on the `--ignore-case` flag.
4. **Pattern Matching**: The program reads each file line by line and checks if the given pattern exists in any line. If a match is found, the file path, line number, and line content are displayed.## Output
When a match is found, the output is displayed as follows:
```
Found in /path/to/file.txt: Line 12: This is a line containing the word error.
```If no matches are found, there will be no output.
## Error Handling
- If a file cannot be opened, an error message will be printed.
- Files that are not valid UTF-8 will be skipped with a warning.
- If an invalid directory path is provided, an error will be printed.## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Contributions
Feel free to fork this project and open issues or pull requests if you'd like to contribute. Contributions are welcome!
```
### Key Sections:
- **Features**: Highlights the key capabilities of the tool, such as recursive search and support for case-insensitive searches.
- **Requirements**: Specifies that Rust needs to be installed to run the tool.
- **Installation**: Describes how to clone the project and build it using Cargo.
- **Usage**: Provides examples for different ways to use the tool with different command-line arguments.
- **How It Works**: Explains the tool’s functionality and how it handles files, directories, and search modes.
- **Output**: Describes how the results are displayed.
- **Error Handling**: Explains how errors, such as invalid files or directories, are handled.
- **License**: States the licensing information for the project.
- **Contributions**: Encourages other developers to contribute to the project.