关于linux:grepsed和awk之grep

43次阅读

共计 3378 个字符,预计需要花费 9 分钟才能阅读完成。

1.1 字符

1.1.1 特定字符:”

蕴含 ”root” 的字符

[[email protected] ~]$ grep 'root' passwd 
root:x:0:0:root:/root:/bin/bash

1.1.2 范畴字符:[]

蕴含数字 + 大小写字母的字符

 grep '[0-9a-zA-Z]' passwd 

1.1.3 任意字符 .

[[email protected] ~]$ grep '.' passwd 
会全副过滤出来 

1.1.4 取反 [^]

[[email protected] ~]$ grep '[^a-zA-Z0-9:/-]' passwd 
不蕴含大小写字母、不蕴含数字、不蕴含冒号、不蕴含斜杠、不蕴含横杠的后果。

1.2 边界字符 ^$

1.2.1 头字符 ^ 和尾字符 $

以 ftp 结尾

[[email protected] ~]$ grep '^ftp' passwd 
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

以 false 结尾

[[email protected] ~]$ grep 'false$' passwd 
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false

空白行:‘^$’

[[email protected] ~]$ grep '^$' passwd 

1.3 元字符 \w\W

1.3.1 字母数字下划线 \w

相当于 grep ‘[a-zA-Z0-9_]’ passwd

[[email protected] ~]$ grep '\w' passwd

1.3.1 非字母数字下划线 \W

相当于 grep ‘[^a-zA-Z0-9_]’ passwd

[[email protected] ~]$ grep '\W' passwd 

1.4 单词宰割元字符 \b

[[email protected] ~]$ grep '\bx\b' passwd 
// 这样就不会过滤出这样的行了:/var/spool/postfix:/sbin/nologin

1.5 反复字符示意

1.5.1 字符串

一般字符串,比方:’root’, ‘r..t’ 等;

要过滤两个数字相连的,谬误形式:[[email protected] ~]$ grep ‘0-9’ passwd

正确形式:加上单词宰割字符

[[email protected] ~]$ grep '\b[0-9][0-9]\b' passwd 

1.5.2 反复字符示意

  • * 零次或屡次
  • + 一次或屡次
  • ?零次或一次

创立一个文本文件:test.txt

niewjhao hello
ni hao hello
niee hao hello

niewj
nice niewj

abcnilson

niewjniewjniewj

niniii
ni
nini
ninini

nij
ksdf
;ni
;

1.5.3 单个字符反复

#1. 蕴含 "nie", 且 "e" 有 0 个或者多个
[[email protected] ~]$ grep 'nie*' test.txt 
niewjhao hello
ni hao hello
niee hao hello
niewj
nice niewj
abcnilson
niewjniewjniewj
niniii
ni
nini
ninini
nij
;ni

#2. 蕴含 "nie", 且 "e" 有 1 个或者多个,(留神:"+" 前要加转义字符 \)
[[email protected] ~]$ grep 'nie\+' test.txt 
niewjhao hello
niee hao hello
niewj
nice niewj
niewjniewjniewj

#3. 蕴含 "nie", 且 "e" 有 0 个或者 1 个 (留神:"?" 前要加转义字符 \)
[[email protected] ~]$ grep 'nie\?' test.txt 
niewjhao hello
ni hao hello
niee hao hello
niewj
nice niewj
abcnilson
niewjniewjniewj
niniii
ni
nini
ninini
nij
;ni
  • (留神:”?” 前要加转义字符)
  • (留神:”+” 前要加转义字符)

1.5.4 一组字符反复

#1. 蕴含 "nie", 且 "nie" 有 0 个或者多个
[[email protected] ~]$ grep '\(nie\)*' test.txt 
// 略。因为 0 个会匹配到空行和所有

#2. 蕴含 "nie", 且 "nie" 有 1 个或者多个
[[email protected] ~]$ grep '\(nie\)\+' test.txt 
niewjhao hello
niee hao hello
niewj
nice niewj
niewjniewjniewj

#3. 蕴含 "nie", 且 "nie" 有 0 个或者 1 个
[[email protected] ~]$ grep '\(nie\)\?' test.txt 
// 略。因为 0 个会匹配到空行和所有 

1.5.5 反复次数限度 {n, m}

  • * {0,}
  • + {1,}
  • ? {0, 1}
# "niewj" 这个字符串呈现 1 次到两次
[[email protected] ~]$ grep '\(niewj\)\{1,2\}' test.txt 
niewjhao hello
niewj
nice niewj
niewjniewjniewj

这里会发现 ”niewjniewjniewj” 其实是 3 次,然而也列出来了,这就是正则的 ” 贪心匹配模式 ”,会进行屡次匹配。

1.5.6 任意字符串留神贪心模式

# 如果咱们要找的是 "niewj",上面不对,因为其匹配的其实是:"niewj:x:1000:1000::/home/niewj"
[[email protected] ~]$ grep 'n.*j' passwd 
niewj:x:1000:1000::/home/niewj:/bin/bash

# 上面匹配到的才是正确的:2 个 "niewj"
[[email protected] ~]$ grep '\bn[a-zA-Z]*j\b' passwd 
niewj:x:1000:1000::/home/niewj:/bin/bash
# 上面这两个也能够:# grep 'n[a-zA-Z]*j' passwd
# grep 'n\w*j' passwd

grep 'n.*j' passwd 匹配要留神贪心模式,如下面要获得 ”niewj” 不能用 ”.*”

1.6 逻辑或匹配 |

文本中蕴含 ”bin/false” 的行,也有蕴含 ”bin/sync” 的行,如果两者都须要,则应用逻辑或 ”|”

[[email protected] ~]$ grep 'bin/\(false\|sync\)' passwd 
sync:x:5:0:sync:/sbin:/bin/sync
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false

下面例子表白的其实是:“bin/(false|sync)” 因为括号和 ”|” 都须要本义,所以都加了转义字符。

1.7 几个案例

1.7.1 匹配 4 -10 位的 QQ 号

测试数据:qq.txt

asdkfjjd;k 578374

174375893

274958

ad8485

883a8585

12111319890202124X

123456789012345

123456789012345x

12345678901234x

345679876556890967

679

根本规定:

  • 0-9
  • 4-10 位
  • 数字结尾数字结尾

所以是:grep '^[0-9]\{4,10\}$' qq.txt

[[email protected] ~]$ grep '^[0-9]\{4,10\}$' qq.txt 
174375893
274958

1.7.2 匹配身份证号 (15-18 且反对 X 尾)

根本规定:

  • 第一位不能是 0
  • 两头是 13-16 位数字
  • 尾数是数字或 ”X” 或 ”x”
[[email protected] ~]$ grep '^[1-9][0-9]\{13,16\}[0-9xX]$' qq.txt 
12111319890202124X
123456789012345
123456789012345x
12345678901234x
345679876556890967

1.7.3 匹配明码规定

数字、字母、下划线组成、大于 8 位

[[email protected] ~]$ grep '^\w\{8,\}$' qq.txt 
174375893
883a8585
12111319890202124X
123456789012345
123456789012345x
12345678901234x
345679876556890967

正文完
 0