栏目分类

热点资讯

你的位置:欧冠体育下载首页注册 > 行业新闻 >

我们一起玩转 Grep 指令

发布日期:2022-08-07 06:11    点击次数:111

在一个阳亮光媚、晴空万里的正午,一个挠头的顺序员正在与团队一姐排查超时成就,只见一姐手速极快的查找着一个又一个日志,倏地定位到一个又一个怀疑人,仰慕之情油然而生,为了后续也兴许在小迷妹手上秀技能,所以暗下刻意操办深造这个牛逼的货物。上面有请来日诰日的配角(grep指令)闪亮退场。

1、根抵语法

grep这个linux指令巨匠必定不目生,其用于查找文件中吻合条件的字符串,上面来看看这个高频的指令怎么样运用。

grep [选项] 查找内容 [源文件] 

窥察其形成组织,由四部份形成:指令名(grep)、选项、查找内容、源文件,个中需求留心的有两个职位地方,上面让我们垂垂道来。

源文件

源文件部份是举足轻重的,若不指定任何文件名称或是所给予的文件名为-,则grep指令会从标准输入动作举措读取数据,其运用以下所示:

// 文件门路为/test  // 领受cat的输入 cat ./test |grep 'hello'  // 存在门路部份参数 grep 'hello' ./test 

选项部份

选项部份相比多,可以或许经由过程grep --help指令来看一下有哪些选项:

Regexp selection and interpretation: // 正则剖明式抉择和说明   -E, --extended-regexp     PATTERN is an extended regular expression (ERE)   -F, --fixed-strings       PATTERN is a set of newline-separated strings   -G, --basic-regexp        PATTERN is a basic regular expression (BRE)   -P, --perl-regexp         PATTERN is a Perl regular expression   -e, --regexp=PATTERN      use PATTERN for matching   -f, --file=FILE           obtain PATTERN from FILE   -i, --ignore-case         ignore case distinctions   -w, --word-regexp         force PATTERN to match only whole words   -x, --line-regexp         force PATTERN to match only whole lines   -z, --null-data           a data line ends in 0 byte, not newline  Miscellaneous: // 种种各式的   -s, --no-messages         suppress error messages   -v, --invert-match        select non-matching lines // 搜寻不成家的行   -V, --version             display version information and exit       --help                display this help text and exit  Output control: // 输出掌握   -m, --max-count=NUM       stop after NUM matches   -b, --byte-offset         print the byte offset with output lines   -n, --line-number         print line number with output lines       --line-buffered       flush output on every line   -H, --with-filename       print the file name for each match   -h, --no-filename         suppress the file name prefix on output       --label=LABEL         use LABEL as the standard input file name prefix   -o, --only-matching       show only the part of a line matching PATTERN   -q, --quiet, --silent     suppress all normal output       --binary-files=TYPE   assume that binary files are TYPE;                             TYPE is 'binary', 'text', or 'without-match'   -a, --text                equivalent to --binary-files=text   -I                        equivalent to --binary-files=without-match   -d, --directories=ACTION  how to handle directories;                             ACTION is 'read', 'recurse', or 'skip'   -D, --devices=ACTION      how to handle devices, FIFOs and sockets;                             ACTION is 'read' or 'skip'   -r, --recursive           like --directories=recurse   -R, --dereference-recursive  likewise,行业新闻 but follow all symlinks       --include=FILE_PATTERN  search only files that match FILE_PATTERN       --exclude=FILE_PATTERN  skip files and directories matching FILE_PATTERN       --exclude-from=FILE   skip files matching any file pattern from FILE       --exclude-dir=PATTERN  directories that match PATTERN will be skipped.   -L, --files-without-match  print only names of FILEs containing no match   -l, --files-with-matches  print only names of FILEs containing matches   -c, --count               print only a count of matching lines per FILE   -T, --initial-tab         make tabs line up (if needed)   -Z, --null                print 0 byte after FILE name  Context control: // 凹凸文掌握   -B, --before-context=NUM  print NUM lines of leading context   -A, --after-context=NUM   print NUM lines of trailing context   -C, --context=NUM         print NUM lines of output context   -NUM                      same as --context=NUM       --color[=WHEN],       --colour[=WHEN]       use markers to highlight the matching strings;                             WHEN is 'always', 'never', or 'auto'   -U, --binary              do not strip CR characters at EOL (MSDOS/Windows)   -u, --unix-byte-offsets   report offsets as if CRs were not there 

看着选项内容真的良多,背起来真实不轻易,亏得文档中给我们做了分类,只需求记着这些分类是干什么的,尔后在需求的岁月从内里举行搜寻即可倏地搜寻到所需用法(感到看其内容必看菜鸟教程上的内容苟且良多)

(1)当需求经由过程正则的要领举行搜寻内容时,去"Regexp selection and interpretation"区块找选项即可,经常使用的有:

-E:经由过程正则剖明式举行搜寻 

(2)当需求对输出的内容举行掌握时,去"Output control"区块找选项即可,经常使用的有以下几个:

-m 数量:表征成家几屡次就会收场 -n:体现成家行及行号 -H:打印每一个成家的文件名 -r:兴许递归查询,即可以或许输入文件夹查询 -c:统计成家到行的个数 

(3)当需求取得输出内容的凹凸文举行操纵时,去"Context control"区块找选项即可,经常使用的有以下几个:

-B 数量、-A 数量、-C 数量:分腕表征取得内容前、后、先后几行 --color:对输出的内容增加颜色 

(4)除了一些分手相比理解的选项,另有一些选项我集团觉得分其他着实不是很公正,然则它们仍然很首要,让我们一起来看看有哪些:

-i:轻忽字母大小写 -v:反向抉择,也就是体现出没有搜寻出字符串内容的那一行 
2、经典用法

上面已经将其根抵运用做了详细的阐述,俗语说的好:光说不做假把势,光练不说真把势,连说带练全把势。既然上面阐述了一通实践的货物,上面我们就来实战几个经常使用处景,将实践付诸于实际。在实战从前先创立一个文件,文件名是test,文件内容以下所示:

hello world!!! dog cat pig big pig tiger Elephant 

从肯定文件中过滤出包孕pig的

$ grep 'pig' ./test pig big pig 

从包孕某一部份内容的文件中过滤包孕pig的

$ grep 'pig' ./te* pig big pig 

从某一文件夹下全体内容中过滤出包孕pig的

$ grep -r 'pig' . ./test:pig ./test:big pig 

从某一文件中过滤出不包孕pig的

$ grep -v 'pig' ./test hello world!!! dog cat tiger Elephant 

在过滤文件时体现行数

$ grep -n 'pig' ./test 4:pig 5:big pig 

成家出以结尾的内容(经由过程根抵正则剖明式成家即可,根抵正则剖明式字符有^$.[]*)

$ grep ^p ./test pig 

成家出包孕pig或cat内容的行(用到了扩张正则剖明式,其在根抵正则剖明式根抵上增加了(){}?+|等)

$ grep -E 'pig|cat' ./test cat pig big pig 

成家出包孕hello和world内容的行

$ grep 'hello' ./test |grep 'world' hello world!!! 

获失去成家内容‘big pig'的前一行内容

$ grep -B1 'big pig' ./test pig big pig 

取得成家到'pig'行的数量

$ grep -c 'pig' ./test  2 

获失去的pig行的内容高亮体现

$ grep --color 'pig' ./test pig big pig 

经典用法另有良多,不克不迭再逐个举行枚举了,只需求晓得在过滤内容时用此技能能经管80%的成就,但这就足够让自身成为最亮的那个崽。

·巨匠好,我是执鸢者,结业于华中科技大学,新时代农夫工,今朝是baidu前端研发工程师,著有《前端百题斩》、数十篇深造思惟导图(go、React、Redux、Vue、Vuex、操纵体系、Linux、策画情势、js、webpack、nginx)以及大量前端进阶文章。

本文转载自微信群众号「前端点线面」,可以或许经由过程下列二维码关注。转载本文请联络前端点线面群众号。

 



我的网站