第三周总结

第三周学习命令总结
正则表达式与grep命令文本过滤nginx

查找etc目录下 全部包含conf字串的文件
ls -R /etc |grep conf
显示/root/passwd文件中包含root字串所在的行并显字符号
grep root /root/passwd
显示passwd文件中,不包含bash字串的行,并显示行号
grep -n -v bash passwd
显示passwd文件中,包含root字串的行的总行数
grep -c root passwd
仅显示/root/passwd文件中的root字串及所在的行号
grep -on root passwd
显⽰/root/passwd文件中,包含root字串的⾏和其下2行的内容
grep -A2 root passwd
显⽰/root/passwd文件中,包含root字串的行和其上2行的内容
grep -B2 root passwd
显⽰/root/passwd文件中,包含root字串或包含nologin字串的⾏
grep -e root -nologin passwdgit

正则表达式
分两类:基本正则表达式(BRE)和扩展正则表达式(ERE)。
元字符分类:字符匹配、匹配次数、位置锚定、分组。
程序支持:grep、sed、awk、vim、less、nginx、varnish等。
下面先介绍下基本正则表达式各元字符:
字符匹配:
.:匹配任意单个字符;
[]:匹配指定范围内的任意单个字符,例如[A-Z0-9]:表示匹配一个大写字符或数字;
[^]:匹配指定范围外的任意单个字符;
[:alnum:]:字母和数字;
[:alpha:]:表明任何英文大小写字符,亦即 A-Z, a-z;
[:lower:]:小写字母 [:upper:] 大写字母;
[:blank:]:空白字符(空格和制表符);
[:space:]:水平和垂直的空白字符(比[:blank:]包含的范围广);
[:cntrl:]:不可打印的控制字符(退格、删除、警铃...);
[:digit:]:十进制数字 [:xdigit:]十六进制数字;
[:graph:]:可打印的非空白字符;
[:print:]:可打印字符;
[:punct:]:标点符号。
注意:文件名通配符当中,表⽰0或多个任意字符,?表示任意一个单个字符。
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
: 匹配前面的字符任意次,包括0次(贪婪模式:尽量长的匹配);
.* 任意长度的任意字符;
\? 匹配其前面的字符0或1次;
+ 匹配其前面的字符至少1次;
{n} 匹配前面的字符n次;
{m,n} 匹配前面的字符至少m次,至多n次;
{,n} 匹配前面的字符至多n次;
{n,} 匹配前面的字符至少n次。正则表达式

位置锚定:定位出现的位置
^:行首锚定,用于模式的最左侧;
$:行尾锚定,用于模式的最右侧;
^PATTERN$:用于模式匹配整行;
^$:空行;
^[[:space:]]*$:空白行;
\< 或 \b:词首锚定,用于单词模式的左侧;
\> 或 \b:词尾锚定;用于单词模式的右侧;
\<PATTERN\>:匹配整个单词。vim

分组:
():将一个或多个字符捆绑在一块儿,看成一个总体进行处理,如: (root)+;
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:
\1, \2, \3, ...
\1:表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
例如:
(string1+(string2))
\1:表示string1+(string2)

\2:表示string2
后向引用:引用前面的分组括号中的模式所匹配字符, 而非模式自己;
或者: |,例如:a|b: a或b C|cat: C或cat (C|c)at:Cat或cat。bash

egrep命令和扩展正则表达式:
egrep命令仅⽀持扩展正则表达式的⽂本过滤命令,等价于grep -E。
扩展正则表达式元字符: 字符匹配:
.:任意单个字符;
[]:指定范围的字符;
[^]:不在指定范围的字符。
次数匹配:区别基本正则表达式的是使⽤简洁,不须要使⽤转义符号(\)
*:匹配前面字符出现任意次;
?:匹配前面出现字符0次或1次;
+:匹配前面出现字符1次或屡次;
{m}:匹配前面出现字符n次;
{m,n}:匹配前面出现字符最少m次,最多n次。less

位置锚定:
^:匹配行首;
$:匹配行尾;
\<,\b:匹配词首;
\>,\b:匹配词尾。ide

分组:
():生成分组模式;
后向应用:\1,\2,...
或 :a|b:表示匹配a或b;
C|cat:表示匹配C或cat;
(C|c)at:表示匹配Cat或0cat学习

过滤出现0次或屡次的字母a
[root@magedu ~]# echo abaacaaad | grep -o "a*"
a
aa
aaa
过滤出现0次或1次的字母a
[root@magedu ~]# echo abaacd|grep -o "a\?"
a
a
a
过滤出现1次或屡次的字母a
[root@magedu ~]# echo zzzopabaacd|grep -o "a+"
a
aa
过滤出现2次字母a
[root@magedu ~]# echo abaacaaada|grep -o "a{2}"
aa
aa
过滤出现⾄少2次,最多4次的字母a
[root@magedu ~]# echo abaacaaada|grep -o "a{2,4}"
aa
aaa
过滤/root/passwd文件中,以root开头的行
[root@magedu ~]# grep "^root" passwdspa

全部的权限最高只能是r
setfacl -m mask ::r f1.txt排序

ifconfig取前两行
ifconfig |head -2
取ifconfig中的前两行的IP数字
ifconfig |head -2 |tail -1 |tr -s " " |cut -d" " -f3
取df命令里第五列的数字
df |tr -s " " %|cut -d% -f5
取df命令里第五列的数字并将数字排序
df |tr -s " " %|cut -d% -f5|sort -nr
paste 合并两个文件同行号的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默认用TAB
-s : 全部行合成一行显示
例如paste -s f2
paste -s f2 f3
文本排序sort:
把整理过的文本显示在STDOUT,不改变原始文件
sort [options] file(s)

经常使用选项:
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c 选项使用c作为字段界定符
-k X 选项按照使用c字符分隔的X列来整理可以使用屡次

1到94数字随机排序
echo {1..94}|tr ' ' " \n"|sort -R |head -n1
uniq命令:从输入中删除先后相接的重复的行
-c : 显示每行重复出现的次数
-d:只显示重复过的行
-u: 只显示没有重复过的行
显示访问地址次数最多的前十个IP地址

grep命令选项:
--color=auto: 对匹配到的文本着色显示
-m # 匹配#次后中止
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 先后各#行
-e 实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 使用ERE
-F 至关于fgrep,不支持正则表达式
-f file 根据模式文件处理

正则表达式:
基本正则表达式元字符
字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 表明任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

  • 匹配前面的字符任意次,包括0次
    贪婪模式:尽量长的匹配
    .* 任意长度的任意字符
    \? 匹配其前面的字符0或1次
    + 匹配其前面的字符至少1次
    {n} 匹配前面的字符n次
    {m,n} 匹配前面的字符至少m次,至多n次
    {,n} 匹配前面的字符至多n次
    {n,} 匹配前面的字符至少n次

egrep及扩展的正则表达式:
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
扩展正则表达式的元字符:
字符匹配:
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符

扩展正则表达式:
次数匹配:

  • 匹配前面字符任意次
    ? 0或1次
  • 1次或屡次
    {m} 匹配m次
    {m,n} 至少m,至多n次

位置锚定:^ 行首$ 行尾\<, \b 语首\>, \b 语尾分组:()后向引用:\1, \2, ...或者:a|b a或bC|cat C或cat(C|c)at Cat或cat

相关文章
相关标签/搜索