Convert Figma logo to code with AI

svent logosift

A fast and powerful alternative to grep

1,601
108
1,601
45

Top Related Projects

48,187

ripgrep recursively searches directories for a regex pattern while respecting your gitignore

33,285

A simple, fast and user-friendly alternative to 'find'

A code-searching tool similar to ack, but faster.

64,567

:cherry_blossom: A command-line fuzzy finder

2,956

:mag: A simple, fast fuzzy finder for the terminal

rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.

Quick Overview

Sift is a fast and powerful open-source alternative to grep. It's designed for searching through large codebases quickly, with support for various programming languages and file types. Sift aims to provide a more user-friendly and feature-rich experience compared to traditional grep tools.

Pros

  • Extremely fast performance, especially for large codebases
  • Supports many programming languages with built-in syntax highlighting
  • Offers advanced search features like regex, file type filtering, and ignore files
  • User-friendly output with context lines and line numbers

Cons

  • Not as widely adopted or well-known as grep
  • May have a steeper learning curve for users familiar with traditional grep
  • Limited to text-based searches (not suitable for binary file content)
  • Requires installation and setup, unlike grep which is often pre-installed on Unix-like systems

Getting Started

To install Sift on macOS using Homebrew:

brew install sift

For other operating systems, visit the GitHub repository for installation instructions.

Basic usage:

# Search for "example" in all files in the current directory
sift "example"

# Search for "function" in Python files only
sift --ext=py "function"

# Search with regex and display 2 lines of context
sift -n -C 2 "\bfunc\w+\b"

For more advanced usage and options, refer to the Sift documentation or run sift --help.

Competitor Comparisons

48,187

ripgrep recursively searches directories for a regex pattern while respecting your gitignore

Pros of ripgrep

  • Significantly faster performance, especially for large codebases
  • Respects .gitignore rules by default, improving search relevance
  • Supports searching compressed files without explicit decompression

Cons of ripgrep

  • Less flexible in terms of output formatting options
  • Lacks some advanced features like fuzzy matching or multi-line search

Code Comparison

sift:

sift --git "pattern" /path/to/search

ripgrep:

rg "pattern" /path/to/search

Both tools offer similar basic usage, but ripgrep's command (rg) is shorter. The main differences lie in their performance and feature sets rather than syntax.

Key Differences

  • Language: sift is written in Go, while ripgrep is written in Rust
  • Performance: ripgrep generally outperforms sift, especially in large codebases
  • Features: sift offers more advanced search capabilities, while ripgrep focuses on speed and simplicity
  • Default behavior: ripgrep automatically respects .gitignore rules, while sift requires an explicit flag

Conclusion

ripgrep excels in performance and simplicity, making it ideal for large codebases and quick searches. sift offers more advanced features and flexibility, which may be preferable for complex search requirements or specific output formatting needs. The choice between the two depends on the user's specific requirements and preferences.

33,285

A simple, fast and user-friendly alternative to 'find'

Pros of fd

  • Written in Rust, offering better performance and memory safety
  • Colorized output by default, enhancing readability
  • Supports parallel command execution for improved efficiency

Cons of fd

  • Less extensive regex support compared to sift
  • Fewer advanced search options and customization features
  • Limited to filename searches, while sift can search file contents

Code Comparison

fd:

let cmd = fd::FdBuilder::new()
    .hidden(true)
    .no_ignore(true)
    .exec(vec!["ls", "-l"])
    .build()?;
cmd.run()?;

sift:

sift := sift.New()
sift.Paths = []string{"."}
sift.Recursive = true
sift.IgnoreCase = true
sift.Pattern = "example"
matches, _ := sift.Grep()

fd focuses on simplicity and ease of use, providing a straightforward API for file searching and command execution. sift offers more granular control over search parameters and supports content searching, making it more suitable for complex text-based searches within files.

Both tools serve different purposes: fd excels at quick file lookups and simple command execution, while sift is better suited for in-depth text searching across multiple files and directories.

A code-searching tool similar to ack, but faster.

Pros of The Silver Searcher

  • Faster performance, especially for large codebases
  • Ignores files specified in .gitignore by default
  • Supports a wider range of file types and encodings

Cons of The Silver Searcher

  • Less flexible in terms of output formatting options
  • May consume more memory for certain search operations
  • Lacks some advanced features like multi-line matching

Code Comparison

The Silver Searcher:

ag "pattern" /path/to/search

Sift:

sift --git "pattern" /path/to/search

Both tools offer similar basic usage, but Sift provides more granular control over search parameters and output formatting. The Silver Searcher is generally faster and more straightforward for simple searches, while Sift offers more advanced features for complex search scenarios.

The Silver Searcher is written in C, which contributes to its speed advantage. Sift is written in Go, which offers good performance and easier cross-platform compatibility.

Overall, The Silver Searcher is better suited for quick, efficient searches in large codebases, while Sift excels in scenarios requiring more advanced search capabilities and customizable output.

64,567

:cherry_blossom: A command-line fuzzy finder

Pros of fzf

  • More versatile: Can be used for general-purpose fuzzy finding beyond just file searching
  • Faster performance, especially for large datasets
  • Extensive integration with various tools and shells

Cons of fzf

  • Requires more setup and configuration for optimal use
  • Less focused on specific file searching features compared to sift

Code Comparison

sift:

sift -n "pattern" /path/to/search

fzf:

find /path/to/search | fzf --preview 'cat {}'

Key Differences

  • sift is primarily a grep-like search tool, while fzf is a general-purpose fuzzy finder
  • sift focuses on searching file contents, while fzf excels at filtering and selecting from lists of items
  • fzf offers more interactive features and real-time filtering

Use Cases

  • sift: Better for developers who need quick, grep-like searches in codebases
  • fzf: Ideal for users who want a flexible tool for various fuzzy finding tasks, including file navigation and command-line history searching

Community and Maintenance

  • sift has fewer contributors and less frequent updates
  • fzf has a larger community, more frequent updates, and broader adoption in various tools and workflows
2,956

:mag: A simple, fast fuzzy finder for the terminal

Pros of fzy

  • Written in C, potentially offering better performance for large datasets
  • Simpler and more focused on fuzzy finding, with a lightweight codebase
  • Designed for integration into other tools and scripts

Cons of fzy

  • Less feature-rich compared to sift, focusing primarily on fuzzy finding
  • May require additional tools or scripts for more complex search operations
  • Limited configuration options out of the box

Code Comparison

sift:

func (m *Matcher) Match(pattern, subject string) (matched bool, score int) {
    if len(pattern) == 0 {
        return true, 0
    }
    return m.match([]rune(pattern), []rune(subject))
}

fzy:

double match_positions(const char *needle, const char *haystack, size_t *positions) {
    if (!*needle)
        return MATCH_MAX_SCORE;
    return recursive_match(needle, haystack, 0, 0, 0, positions);
}

Both implementations focus on matching patterns, but sift uses Go while fzy uses C. fzy's implementation appears more optimized for performance, using a recursive approach and returning a double score. sift's implementation is more straightforward, returning a boolean and an integer score.

rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.

Pros of ripgrep-all

  • Faster search performance, especially for large codebases
  • Supports searching within compressed files and various file formats (PDF, DOCX, etc.)
  • Built on top of ripgrep, inheriting its advanced features and optimizations

Cons of ripgrep-all

  • Less mature project with potentially fewer community contributions
  • May have a steeper learning curve for users unfamiliar with ripgrep
  • Requires additional dependencies for certain file type searches

Code comparison

ripgrep-all:

rga --rga-adapters=+pdfpages "search term" ./directory

sift:

sift -n --binary "search term" ./directory

Both tools offer powerful search capabilities, but ripgrep-all provides more extensive file format support out of the box. sift, being a more established project, may have better documentation and community support. The choice between the two depends on specific use cases and performance requirements.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

sift

A fast and powerful open source alternative to grep.

Features

sift has a slightly different focus than most other grep alternatives. Code search, log search / digital forensics and data processing are the main use cases, but the primary goal is to provide safe defaults and to make it easily configurable for a specific use case. Among the features are:

  • Stable releases, cross platform support
  • Safe defaults: sift searches everywhere if not configured otherwise
  • Complete & working .gitignore support
  • High performance for many uses cases
  • Support for adding custom file types to narrow down searches
  • Multiline support
  • Support for big files: >50GB, >5,000,000,000 lines and >5,000,000,000 matches successfully tested

Sift allows easy customization. Example: Configure sift to

  • Ignore case
  • Show line numbers
  • Skip binary files
  • Respect .gitignore files:

sift -i -n --binary-skip --git --write-config

The configuration can be overridden for specific directories.

sift understands conditions to process complex formats or support code audits.

Example: Search for .php files containing a call to mysql_query, that is preceded by $_GET or $_POST (accessing external input), but the preceding 5 lines do not contain a call to an escape function:

sift -x php mysql_query --preceded-within "5:_(GET|POST)" --not-preceded-within "5:escape"

Please go to sift-tool.org for more information.

Installation

Download Binaries

You can download binaries for the current version at https://sift-tool.org/download.

sift is available for Linux, Windows, OS X and *BSD.

Install from Package Repositories

Arch Linux

Download and install the binary from http://sift-tool.org/download:

$ yaourt -S sift-bin

Or build and install sift from source at https://github.com/svent/sift:

$ yaourt -S sift

OS X

Using Homebrew:

$ brew install sift

Install with Working Go Environment

If you have a working go environment, you can install sift using "go get":

go get github.com/svent/sift

Contributing

Feature Requests

If there is a feature or option you would like to see in sift, please open an issue and describe what you are missing. Where possible, please include an example (input file, expected output etc.) to better convey your idea.

Bugs / Unexpected Behavior

If you found a bug, please check the open issues and the limitations and restrictions described in the documentation. If you cannot find any documentation about it, please open a new issue, name the sift version you used and describe the steps to reproduce the problem.

Pull requests

Please do not send pull requests and open an issue instead as accepting substantial contributions cannot be done correctly without some legal hassle. Moreover, this allows me to consider already planned features while implementing smaller changes.

License

Copyright (C) 2014-2016 Sven Taute

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.