grep用法解析(macos环境BSD shell)
介绍
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
主要参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| grep [options]
[options]主要参数:
-c:只输出匹配行的计数。
-i:不区分大 小写(只适用于单字符)。 -I:Ignore binary files. -h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
|
testfile
1
| wget -P ~/testfile/ "http://ou0y29lb2.bkt.clouddn.com/po.zip"
|
##全局设置
1 2
| grepc="grep --color" cd $HOME/Documents/test_directory/pojo_test
|
-c : 只输出匹配行的计数
1
| $grepc -c "\<condition\>" ./po/* -d skip
|
-i:不区分大 小写(只适用于单字符)。
1
| $grepc -i "value" ./po/* -d skip
|
-h:查询多文件时不显示文件名。
1
| $grepc -h -i "value" ./po/* -d skip
|
-l:查询多文件时只输出包含匹配字符的文件名。
1
| $grepc -l -h -i "value" ./po/* -d skip
|
-n:显示匹配行及 行号
1
| $grepc -n -i "value" ./po/* -d skip
|
-s:不显示不存在或无匹配文本的错误信息。
照样报错 - - 不知道有啥用…
-v:显示不包含匹配文本的所有行。
1
| grep -h -E -v -i "value|string|return|Criteria|{|}|=|addCriterion|super" ./po/* -d skip | grep [:space:]
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
. :所有的单个字符。
* :有字符,长度可以为0。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| $grepc -n -i "\\$" ./po/* -d skip
$grepc -h -i "^sed" ./po/* -d skip
$grepc -E -h -i "class.*{$" ./po/* -d skip
$grepc -E -h -i "\<cond" ./po/* -d skip
$grepc -E -h -i "tion\>" ./po/* -d skip
$grepc -E -h -i "\<condition\>" ./po/* -d skip
$grepc -E -h "[A-Z]{2,5}" ./po/* -d skip
$grepc -E -h "[A-Z]{2,5}" ./po/* -d skip
$grepc -E -h "\b.{5}\b" ./po/* -d skip
$grepc -E -h "\b[[:alnum:]]{5}\b" ./po/* -d skip
|
grep命令使用简单实例
1 2
| $grepc -E -i -n "value" ./po/t* -d skip
|
1 2 3
| $grepc -E -n "value|one" ./po/test001.txt ./po/test002.txt $grepc -E '\b[a-z]{5}\b' ./po/test001.txt $grepc -E "'number (one)'.*\1" ./po/test001.txt
|
grep命令使用复杂实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #假设您正在'./po/*'目录下搜索带字符 串'value'的文件: $grepc "value" ./po/*.txt #./po/test001.txt:What is your value? #./po/test002.txt:What is your value?
#默认情况下,'grep'只搜索当前目录。如果 此目录下有许多子目录,’grep’会以如下形式列出: #grep: sound: Is a directory #这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法: #明确要求搜索子目录: grep -r #或忽略子目录: grep -d skip #如果有很多 输出时,您可以通过管道将其转到’less’上阅读: $grepc "value" ./po/* | less #这样,您就可以更方便地阅读
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| files="./po/* -r"
$grepc -i obj ./po/*
$grepc -l obj $files
$grepc -L obj $files
$grepc -w obj $files
$grepc -C 2 obj $files
$grepc -E -i "address|value" $files
$grepc -ie address $files | $grepc -ie value
$grepc -n -ie address $files
$grepc -c -ie address $files
|
可以使用国际模式匹配的类名:
1 2 3 4 5 6 7 8 9 10 11
| [[:upper:]] [A-Z]
[[:lower:]] [a-z]
[[:digit:]] [0-9]
[[:alnum:]] [0-9a-zA-Z]
[[:space:]] 空格或tab
[[:alpha:]] [a-zA-Z]
|