grep [options] regex [files]
其中options主要为下表:
选项 含义 功能描述
-i ignore case 忽略大小写
-v invert match 不匹配匹配的
-l file-with-match 输出匹配的文件名
-L file-without-match 输出不匹配的文件名
-c count 输出匹配的数目(行数)
-n number 输出匹配行的同时在前面加上文件名及在文件名中的行数
-h no-filename 抑制文件名的输出
特殊字符
符号 含义 举例
^ 开始标记 "^abc"满足的例子abc、abcd
^ 非(在[]内) "[^abc]"满足的例子:ddd、mpd
$ 结束标记 ”abc$”满足的例子abc、mmabc
. 任意字符 "a.c"满足的例子abc、fapcc
\< 匹配单词开始 "\ <abc"满足的例子abc、abcd \="" style="box-sizing: border-box;">匹配单词结束 "abc\>"满足的例子abc、pmrabc
| 或 "AAA|BBB"满足的例子AAA、BBBpp</abc"满足的例子abc、abcd>
范围
符号 含义 举例
? 匹配前一个字符0或1次 "abc?"满足的例子ab、mabcd
* 匹配前一个字符≥0次 "abc*"满足的例子abbb、abcdk
+ 匹配前一个字符≥1次 "abc+"满足的例子abcd、abcccdd
{} {m}、{m,n}、{m,}、{,n}分别为匹配前一个字符m次、m到n次、≥m次、≤n次 "abc\{3,5\}"满足的例子abcccc、abcccccc
[] []内如果不是范围,选其一;是范围的话,范围内选其一 "m[abc]p"满足的例子acpd;m[1-9]p满足的例子m8pp
() 将候选的所有元素放在()内,用|隔开 "a(1|2|3)bc"满足的例子a1bc、mba3bcd
注意:{}在郑则表达式中需要转移,而{}()不需要。
在正则表达式中,我们通常用尖括号表示一个“词”,比如能够匹配“I love you.”,但不能匹配“My gloves are red.”。
[master@localhost Desktop]$ grep "\<master\>" /etc/passwd
master:x:1000:1000:master:/home/master:/bin/bash
上面的方法还是有些复杂了,grep 中还有一个更加简单的方法来实现对“词”的搜索:
[master@localhost Desktop]$ grep -w "master" /etc/passwd
master:x:1000:1000:master:/home/master:/bin/bash
Linux的grep命令使用or,and,not操作符
1.or操作
(1)使用 \|
[master@localhost Desktop]$ grep -w "master\|bin" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
master:x:1000:1000:master:/home/master:/bin/bash
mysql:x:988:1001::/home/mysql:/bin/false
test:x:1001:1002::/home/test:/bin/bash
ftpuser:x:1002:1003::/home/ftpuser:/bin/bash
(2)使用 -E (‘grep -E’ 命令等同于 egrep)
[master@localhost Desktop]$ grep -wE "master|bin" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
master:x:1000:1000:master:/home/master:/bin/bash
mysql:x:988:1001::/home/mysql:/bin/false
test:x:1001:1002::/home/test:/bin/bash
ftpuser:x:1002:1003::/home/ftpuser:/bin/bash
[master@localhost Desktop]$ egrep -w "master|bin" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
master:x:1000:1000:master:/home/master:/bin/bash
mysql:x:988:1001::/home/mysql:/bin/false
test:x:1001:1002::/home/test:/bin/bash
ftpuser:x:1002:1003::/home/ftpuser:/bin/bash
(3)使用选项 -e
使用grep -e 选项,只能传递一个参数。在单条命令中使用多个 -e 选项,得到多个pattern,以此实现OR操作。
[master@localhost Desktop]$ grep -we "master" -we "bin" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
master:x:1000:1000:master:/home/master:/bin/bash
mysql:x:988:1001::/home/mysql:/bin/false
test:x:1001:1002::/home/test:/bin/bash
ftpuser:x:1002:1003::/home/ftpuser:/bin/bash
2.and操作
(1).
a. grep -E ‘pattern1.*pattern2’ filename (顺序固定)
[master@localhost Desktop]$ grep -E 'master.*bin' /etc/passwd
master:x:1000:1000:master:/home/master:/bin/bash
b. grep -E ‘pattern1.*pattern2|pattern2.*pattern1’ filename (顺序不固定 )
text1.txt
100 Thomas Manager Sales $5,000
200 Jason Developer Technology $5,500
300 Raj Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500
500 Randy Manager Sales $6,000
100 Thomas Sales Manager $5,000
test
[master@localhost Desktop]$ grep -E 'Manager.*Sales|Sales.*Manager' text1.txt
100 Thomas Manager Sales $5,000
500 Randy Manager Sales $6,000
100 Thomas Sales Manager $5,000
(2) 使用多个grep命令
可以使用多个 grep 命令 ,由管道符分割,以此来实现 AND 语义。
grep -E ‘pattern1’ filename | grep -E ‘pattern2’
[master@localhost Desktop]$ grep Manager text1.txt |grep Sales
100 Thomas Manager Sales $5,000
500 Randy Manager Sales $6,000
100 Thomas Sales Manager $5,000
grep not 操作
使用选项 grep -v
使用 grep -v 可以实现 NOT 操作。 -v 选项用来实现反选匹配的( invert match)。如,可匹配得到除下指定pattern外的所有lines。
[master@localhost Desktop]$ grep -v 'Manager' text1.txt
200 Jason Developer Technology $5,500
300 Raj Sysadmin Technology $7,000
Linux cut
cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]
cut -d<TAB>
其中的“<TAB>”是由一个反斜杠\ 加上一个TAB按键组成的,在cmd下输入TAB的方法是先按ctrl+v,再按一个TAB键
自定义cmd分割