1、grep命令: grep, egrep, fgrep - print lines matching a pattern
grep命令用于打印输出用户给定的模式内容——即搜索整个文件的每一行,使用用户给定的模式—过滤条件,若某行匹配此模式则显示出来。
注意:模式——即由正则表达式的元字符及文本所编写出的过滤条件(默认显示只要此行中有匹配的字符则全行显示——贪婪模式显示)
补充:
1、Linux上文本处理工具
1)、grep:文本过滤工具(pattern—模式)工具——grep、egrep、fgrep
2)、sed—stream editor:流编辑器,文本编辑工具
3)、awk:Linux上实现为gawk,文本报告生成器——格式化文本
2、正则表达式——Regual Expression —RE/Regexp
1)、正则表达式使用单个字符串来描述、匹配一系列某个句法规则的字符串,在很多文本编辑器里面,正则表达式通常用来检索、替换那些匹配某模式的文本。
2)、正则表达式分类:
A、基本正则表达式:Basic Regual Expression——BRE
B、扩展正则表达式:Extend Regual Expression——ERE
3)、基本正则表达式元字符
第一类:字符匹配
A、· :匹配任意单个字符
例:
[root@hu recover]# grep "r..t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
B、[ ]:匹配指定范围内任意单个字符
例:
[root@hu recover]# grep "s[[:alpha:]]in" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
C、[^]:匹配指定范围外的任意单个字符
第二类:匹配次数——用在要指定其出现的次数的字符后,用于限定字符出现的次数,默认有多长匹配多长
A、*:匹配其前面字符任意次
例:
[root@hu recover]# grep "a*" cp.txt
aaaddsdfsdfsdf
aaaaaaasdjdsdfgd
B、·*:匹配任意长度字符
例:
[root@hu recover]# grep "a.*" cp.txt
aaaddsdfsdfsdf
aaaaaaasdjdsdfgd
aaxxx
C、\?:匹配其前面的字符0次或1次,其前面字符可有可无
例:
[root@hu recover]# grep "a\?" cp.txt
aaaddsdfsdfsdf
aaaaaaasdjdsdfgd
aaxxx
xxxxvdfgf
D、\+:匹配其前面的字符1次或多次,其前面字符出现至少一次
例:
[root@hu recover]# grep "a\+" cp.txt
aaaddsdfsdfsdf
aaaaaaasdjdsdfgd
aaxxx
E、\{m\}:匹配其前面的字符m次
例:
[root@hu recover]# grep "a\{6\}" cp.txt
aaaaaaasdjdsdfgd
F、\{m,n\}:匹配其前面的字符至少m次,最多n次
G、\{0,n\}:匹配最多n次
H、\{m,\}:匹配最少m次
第三类:位置锚定——即搜索指定位置
A、^:行首锚定——用于模式最左侧
例:
[root@hu recover]# grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
B、$:行尾锚定——用于模式最右侧
例:
[root@hu recover]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
hu:x:1000:1000:hu:/home/hu:/bin/bash
C、^pattern$:用PATTERN来匹配整行
例:
[root@hu recover]# grep '^r.*n$' /etc/passwd
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
D、^$:表示空白行——不能有空格
E、^[[:space:]]$:表示显示空白行——可以有空格
F、\<或\b:词首锚定,用于单词模式的左侧
G、\>或\b:词尾锚定,用于单词模式的右侧
H、\<word>\:用于精确锚定单词
例:
[root@hu recover]# grep '\<root\>' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
注意:单词——指的是非特殊字符组成的连续字符(字符串)都称为单词
4)、分组以及引用
A、\( \):将一个或多个字符捆在一起,当做一个整体进行处理
例:
[root@hu recover]# grep '\<\(bin\/bash\)\>' /etc/passwd
root:x:0:0:root:/root:/bin/bash
hu:x:1000:1000:hu:/home/hu:/bin/bash
B、Note:分组括号中的模式或匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为
\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符
\3:模式从左侧起,第三个左括号以及与之匹配的右括号之间的模式所匹配到的字符
……
例:
ifconfig | grep -o '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}'
C、后向引用:引用前面的分组括号中的模式所匹配到的字符
注意:括号能嵌套,不能交叉
(1)使用格式
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
例:
[root@hu ~]# grep "UUID" /etc/fstab
UUID=c6c99019-d41a-4376-8448-364787b4ae54 /boot ext4 defaults 1 2
(2)option
grep -l
:ignorecase——忽略字符大小写
grep -o
:仅显示匹配到的字符串本身
grep -v
:invert-match——显示不能被模式匹配到的行
grep -E
:支持使用扩展的正则表达式元字符
grep -F
:搜索固定字符串——不支持正则表达式
grep -G
:支持基本正则表达式或元字符
grep -q
:静默模式,不输出任何信息
grep -A #
:显示匹配的行和此行的后 # 行—after
grep -B #
:显示匹配的行和此行的前 # 行——before
grep -C #
:显示匹配的行和此行前 # 行和后 # 行—context
[root@hu recover]# grep -A 2 "ur1" test.sh
useradd ur1 && useradd ur2 && useradd ur3
a=$(id -u ur1 | grep -o "^[0-9]\{1,4\}")
b=$(id -u ur2 | grep -o "^[0-9]\{1,4\}")
[root@hu recover]# grep -B 2 "c" test.sh
b=$(id -u ur2 | grep -o "^[0-9]\{1,4\}")
c=$(id -u ur3 | grep -o "^[0-9]\{1,4\}")
echo ${sum=$[$a+$b+$c]}
[root@hu recover]# grep -C 2 "\-o" test.sh
useradd ur1 && useradd ur2 && useradd ur3
a=$(id -u ur1 | grep -o "^[0-9]\{1,4\}")
b=$(id -u ur2 | grep -o "^[0-9]\{1,4\}")
c=$(id -u ur3 | grep -o "^[0-9]\{1,4\}")
echo ${sum=$[$a+$b+$c]}
grep --color
:对匹配到的文本着色后高亮显示
2、egrep命令:
egrep命令用于支持扩展的正则表达式实现类似于grep文本过滤功能——grep -E
(1)使用格式——与grep使用格式相同
(2)支持的正则表达式元字符与grep相同
3、fgrep命令:
不支持正则表达式元字符——当无需要用到元字符去编写模式时,使用fgrep必能更好
4、wc命令:- print newline, word, and byte counts for each file
wc命令用于单词、字符、字节的统计
(1)使用格式
wc [OPTION]... [FILE]...
wc [OPTION]... --files0-from=F
(2)option
wc -l
:仅显示行数
[root@hu recover]# wc -l test.sh
8 test.sh
wc -w
:仅显示单词
[root@hu recover]# wc -w test.sh
31 test.sh
wc -c
::仅显示字节数
[root@hu recover]# wc -c test.sh
192 test.sh
5、cut命令:- remove sections from each line of files
cut命令用于从每一行去移除片段
(1)使用格式
cut OPTION... [FILE]...
(2)option
cut -d char
:以char为分隔符,进行移除
cut -f #/#-#/#,#
:移除挑选出的字段或列
#
:表示指定的单个字段
[root@hu recover]# cat /etc/passwd|cut -d: -f 1 ==>表示以:为分隔符,只显示第一个字段
root
bin
#-#
:表示连续的字段
[root@hu recover]# cat /etc/passwd|cut -d: -f 1-3 ==>表示以:为分隔符,只显示第一个字段到第三个字段
root:x:0
bin:x:1
#,#
:表示离散的字段
[root@hu recover]# cat /etc/passwd|cut -d: -f 1,3 ==>表示以:为分隔符,只显示第一个字段和第三个字段
root:0
bin:1
6、sort命令:- sort lines of text files
sort命令用于对文本文件排序,并不会对内部文件进行修改
(1)使用格式
sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F
(2)option
sort -t char
:指定分隔符
sort -k #
:用于排序比较的字段
sort -n
:基于数值大小进行排列而非字符进行排列
[root@hu recover]# sort -t: -k3 -n /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sort -r
:逆序排序
sort -f
:忽略字符大小写
sort -u
:移除或重复的行只保留一份——重复的行:连续且相同
7、uniq命令:- report or omit repeated lines
uniq命令用于报告或移除重复的行
(1)使用格式
uniq [OPTION]... [INPUT [OUTPUT]]
(2)option
uniq -c
:对每行重复的计数
uniq -d
:仅显示未曾重复过的行
uniq -u
:仅显示重复过的行
8、diff命令:- compare files line by line
diff命令用于逐行比较文件中的内容
(1)使用格式
diff [OPTION]... FILES
(2)option
diff oldfile newfile >file.patch
:生成补丁文件*.patch
[root@hu recover]# diff test.sh test1.sh > test.patch
[root@hu recover]# ls
cptest cp.txt io test1.sh test.patch test.sh tt
diff -u
:使用unfiled(联合查看文件不同处)机制——显示行修改时上下文(默认为3行)
[root@hu recover]# diff -u test.sh test1.sh
--- test.sh 2018-11-30 09:22:18.685266841 -0500
+++ test1.sh 2018-11-30 09:18:45.884014479 -0500
@@ -8,5 +8,3 @@
echo ${sum=$[$a+$b+$c]}
echo $SHELL
-
-echo $SHELL
9、patch命令:- apply a diff file to an original
patch命令用于给老文件打补丁
(1)使用格式
patch [options] [originalfile [patchfile]]
(2)option
patch -i
:向文件打补丁
[root@hu recover]# patch test.sh < test.patch
patching file test.sh
patch -R
:撤回已经打的补丁
[root@hu recover]# patch -R test.sh < test.patch
patching file test.sh