[shell] grep & tee

tee

      tee 把数据重定向到给定文件屏幕上。

 

grep

      grep [OPTIONS][-e PATTERN | -f FILE] [FILE...]

       对shell有特殊含义的字符($, * , [, ], |, ^, (, ),\)出现在pattern 参数中时必须加双引号

 

           1. grep最简单的用法,匹配一个词:grep word filename

           2. 能够从多个文件里匹配:grep word filename1 filenam2 filename3

           3. 能够使用正則表達式匹配:grep -E pattern f1 f2 f3...

           4. 能够使用-o仅仅打印匹配的字符,例如以下所看到的:

 >> echo this is a line. | grep -E -o "[a-z]*\."
     line.
 

常用参数:

-?   同时显示匹配行上下的?行;

-c    只打印匹配的行数,不显示匹配的内容

-i     忽略大小写

-n   在匹配的行前面打印行号

-v   反向检索,只显示不匹配的行

-o  只显示匹配的字符

-e pattern  支持多个pattern

-A 数字N    显示匹配行后N行

-B 数字N    显示匹配行前N行

 

-l   列出文件内容符合指定的范本样式的文件名称

-L  列出文件内容不符合指定的范本样式的文件名称

-c 计算符合范本样式的列数

 

grep 正则表达式字符集

 

^             锚定行的开始 如:'^grep'匹配所有以grep开头的行。

$              锚定行的结束 如:'grep$'匹配所有以grep结尾的行。

.               匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。

*              匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。

[]             匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。

[^]           匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

\(..\)         标记匹配字符,如'\(love\)',love被标记为1。

\<             锚定单词的开始,如:'\

\>             锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。

x\{m\}       重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。

x\{m,\}      重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。

x\{m,n\}    重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。

\w             匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。

\W             \w的反置形式,匹配一个或多个非单词字符,如点号句号等。

\b              单词锁定符,如: '\bgrepb\'只匹配grep。

用于egrep和 grep -E的元字符扩展集

+         匹配一个或多个先前的字符。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。

?          匹配零个或多个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。

a|b|c    匹配a或b或c。如:grep|sed匹配grep或sed

()         分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。

x{m},x{m,},x{m,n}      作用同x\{m\},x\{m,\},x\{m,n\}

 

grep命令常见用法

在文件中搜索一个单词,命令会返回一个包含“match_pattern”的文本

grep match_pattern file_name
grep "match_pattern" file_name

在多个文件中查找:

grep "match_pattern" file_1 file_2 file_3 ...

输出除match_pattern所在行之外的所有行 -v 选项:

grep -v "match_pattern" file_name

标记匹配颜色 --color=auto 选项:

grep "match_pattern" file_name --color=auto

使用正则表达式 -E 选项:

grep -E "[1-9]+"
或
egrep "[1-9]+"

只输出文件中匹配到的部分 -o 选项:

echo this is a test line. | grep -o -E "[a-z]+\."
line.

echo this is a test line. | egrep -o "[a-z]+\."
line.

统计文件或者文本中包含匹配字符串的行数 -c 选项:

grep -c "text" file_name

输出包含匹配字符串的行数 -n 选项:

grep "text" -n file_name
或
cat file_name | grep "text" -n

#多个文件
grep "text" -n file_1 file_2

搜索多个文件并查找匹配文本在哪些文件中

grep -l "text" file1 file2 file3...

grep递归搜索文件

多级目录中对文本进行递归搜索 -r:

grep "text" . -r -n
# .表示当前目录。

忽略匹配样式中的字符大小写 -i:

echo "hello world" | grep -i "HELLO"
hello

选项 -e 选择多个匹配样式:

echo this is a text line | grep -e "is" -e "line" -o
is
line

#也可以使用-f选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。
cat patfile
aaa
bbb

echo aaa bbb ccc ddd eee | grep -f patfile -o

在grep搜索结果中包括或者排除指定文件

#只在目录中所有的.sv和.v文件中递归搜索字符"rtl"
grep "rtl" . -r --include *.{sv,v}

#在搜索结果中排除所有README文件
grep "main()" . -r --exclude "README"

#在搜索结果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist

使用0值字节后缀的grep与xargs

#测试文件:
echo "aaa" > file1
echo "bbb" > file2
echo "aaa" > file3

grep "aaa" file* -lZ | xargs -0 rm

#执行后会删除file1和file3,grep输出用-Z选项来指定以0值字节作为终结符文件名(\0),xargs -0 读取输入并用0值字节终结符分隔文件名,然后删除匹配文件,-Z通常和-l结合使用。

grep静默输出:

grep -q "test" filename

#不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试。

打印出匹配文本之前或者之后的行:

#显示匹配某个结果之后的3行,使用 -A 选项:
seq 10 | grep "5" -A 3
5
6
7
8

#显示匹配某个结果之前的3行,使用 -B 选项:
seq 10 | grep "5" -B 3
2
3
4
5

#显示匹配某个结果的前三行和后三行,使用 -C 选项:
seq 10 | grep "5" -C 3
2
3
4
5
6
7
8

#如果匹配结果有多个,grep会用“--”作为各匹配结果之间的分隔符:
echo "a\nb\nc\na\nb\nc" | grep a -A1
a
b
--
a
b

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值