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分割