Linux grep
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键
Linux awk
自定义cmd分割