linux ag命令,超快的文件搜索工具Ag

前言

Ag 是类似ack, grep的工具, 它来在文件中搜索相应关键字。

官方列出了几点选择它的理由:

它比ack还要快 (和grep不在一个数量级上)

它会忽略.gitignore和.hgignore中的匹配文件

如果有你想忽略的文件,你需要将(congh .min.jscough*)加入到.ignore文件中

它的命令名称更短:-)

安装

源码安装

下载源码

安装PCRE

目前已经有PCRE2,但这里需要PCRE

https://downloads.sourceforge...

从官网下载.tar.gz的版本,注意不要下载zip版本

下载后解压缩正常安装

./configure --prefix=/usr \

--docdir=/usr/share/doc/pcre-8.41 \

--enable-unicode-properties \

--enable-pcre16 \

--enable-pcre32 \

--enable-pcregrep-libz \

--enable-pcregrep-libbz2 \

--enable-pcretest-libreadline \

--disable-static &&

make && make install

默认是安装到/usr/local下

安装lzma

yum install xz-libs.x86_64 xz-devel.x86_64

安装Ag

./configure PCRE_CFLAGS="-I /usr/local/include" PCRE_LIBS="-L /usr/local/lib -lpcre" && make && make install

RHEL7

yum install epel-release.noarch the_silver_searcher

CentOS7

yum install the_silver_searcher

安装好后是最新版2.10

命令

Usage: ag [FILE-TYPE] [OPTIONS] PATTERN [PATH]

Recursively search for PATTERN in PATH.

Like grep or ack, but faster.

Example:

ag -i foo /bar/

Output Options:

--ackmate Print results in AckMate-parseable format

-A --after [LINES] Print lines after match (Default: 2)

-B --before [LINES] Print lines before match (Default: 2)

--[no]break Print newlines between matches in different files (Enabled by default)

-c --count Only print the number of matches in each file. (This often differs from the number of matching lines)

--[no]color Print color codes in results (Enabled by default)

--color-line-number Color codes for line numbers (Default: 1;33)

--color-match Color codes for result match numbers (Default: 30;43)

--color-path Color codes for path names (Default: 1;32)

--column Print column numbers in results

--[no]filename Print file names (Enabled unless searching a single file)

-H --[no]heading Print file names before each file's matches (Enabled by default)

-C --context [LINES] Print lines before and after matches (Default: 2)

--[no]group Same as --[no]break --[no]heading

-g --filename-pattern PATTERN Print filenames matching PATTERN

-l --files-with-matches Only print filenames that contain matches (don't print the matching lines)

-L --files-without-matches Only print filenames that don't contain matches

--print-all-files Print headings for all files searched, even those that don't contain matches

--[no]numbers Print line numbers. Default is to omit line numbers when searching streams

-o --only-matching Prints only the matching part of the lines

--print-long-lines Print matches on very long lines (Default: >2k characters)

--passthrough When searching a stream, print all lines even if they don't match

--silent Suppress all log messages, including errors

--stats Print stats (files scanned, time taken, etc.)

--stats-only Print stats and nothing else. (Same as --count when searching a single file)

--vimgrep Print results like vim's :vimgrep /pattern/g would (it reports every match on the line)

-0 --null --print0 Separate filenames with null (for 'xargs -0')

Search Options:

-a --all-types Search all files (doesn't include hidden files or patterns from ignore files)

-D --debug Ridiculous debugging (probably not useful)

--depth NUM Search up to NUM directories deep (Default: 25)

-f --follow Follow symlinks

-F --fixed-strings Alias for --literal for compatibility with grep

-G --file-search-regex PATTERN Limit search to filenames matching PATTERN

--hidden Search hidden files (obeys .*ignore files)

-i --ignore-case Match case insensitively

--ignore PATTERN Ignore files/directories matching PATTERN (literal file/directory names also allowed)

--ignore-dir NAME Alias for --ignore for compatibility with ack.

-m --max-count NUM Skip the rest of a file after NUM matches (Default: 10,000)

--one-device Don't follow links to other devices.

-p --path-to-ignore STRING Use .ignore file at STRING

-Q --literal Don't parse PATTERN as a regular expression

-s --case-sensitive Match case sensitively

-S --smart-case Match case insensitively unless PATTERN contains uppercase characters (Enabled by default)

--search-binary Search binary files for matches

-t --all-text Search all text files (doesn't include hidden files)

-u --unrestricted Search all files (ignore .ignore, .gitignore, etc.; searches binary and hidden files as well)

-U --skip-vcs-ignores Ignore VCS ignore files (.gitignore, .hgignore; still obey .ignore)

-v --invert-match

-w --word-regexp Only match whole words

-W --width NUM Truncate match lines after NUM characters

-z --search-zip Search contents of compressed (e.g., gzip) files

File Types:

The search can be restricted to certain types of files. Example:

ag --html needle

- Searches for 'needle' in files with suffix .htm, .html, .shtml or .xhtml.

For a list of supported file types run:

ag --list-file-types

ag was originally created by Geoff Greer. More information (and the latest release)

can be found at http://geoff.greer.fm/ag

自动安装脚本示例

#!/usr/bin/env bash

#Author: Harris Zhu

#Dep: make sure you have the root permission

#Usage . install_ag.sh

set -x

TEMP_DIR=$(mktemp -d Leslie.Guan.XXXXXX)

cd ${TEMP_DIR}

wget https://github.com/ggreer/the_silver_searcher/archive/master.zip

TAR_DIR=$(unzip *.zip)

TAR_DIR=${TAR_DIR%%/*}

TAR_DIR=${TAR_DIR##*:}

cd ${TAR_DIR}

apt-get install -y automake pkg-config libpcre3-dev zlib1g-dev liblzma-dev --force-yes

./build.sh && make install

cd ../../

rm -rf ${TEMP_DIR}

ag -V

set +x

pattern

示例一

bVVG58?w=601&h=261

由上面例子可以知道ag的pattern支持s, w等正则

后言

ag的使用非常简单,它的选项也不多,所以我在上面列出了它的help内容。

它本身已经非常强大,搭配上fzf就会更强大,所以下一篇我会写fzf。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值