正则表达式
字符 |
作用 |
^ |
尖角号,用法为^zqf,表示匹配以zqf开头的行 |
$ |
美元符,用法为zqf$,表示匹配以zqf结尾的行 |
^$ |
组合符,表示空行,逻辑解释就是以^结尾的行,或者以$开头的行 |
. |
点号,表示匹配任意一个且只有一个字符(但不能匹配空行) |
\ |
转义字符 |
* |
匹配前一个字符(连续出现)0次或一次以上 注意,当重复0次的时候,表示啥也没有(空),即匹配所有内容 |
.* |
组合符,匹配所有内容 |
^.* |
组合符,匹配以任意多个字符开头的内容 |
.*$ |
组合符,以任意多个字符结尾的内容 |
[abc] |
匹配[ ]集合内的任意一个字符a或b或c;也可以写成[a-c] |
abc |
匹配不包含后的任意字符a或b或c,这里的表示对[abc]的取反不能用!代替 |
扩展正则表达式
扩展正则必须用 grep -E 才能生效
字符 |
作用 |
+ |
匹配前一个字符1次或多次 |
[: /]+ |
匹配括号内的:或/字符一次或多次, |
? |
匹配前一个字符0次或1次 |
() |
分组过滤被括起来的东西表示一个整体,另外()的内容可以被后面的\n引用,n为数字,表示引用第几个括号的内容 |
\n |
引用前面()小括号里的内容,例如:(aa)\1。匹配aaaa |
a{n,m} |
匹配前一个字符最少n次,最多m次 |
a{n,} |
匹配前一个字符最少n次 |
a{n} |
匹配前一个字符正好n次 |
a{,m} |
匹配前一个字符最多m次 |
字符[] 案例:
ps -ef |grep ngin[x]
[]是正则表达式
代表匹配里面的字符
[:1]+ 匹配里面的:和1一次或多次
grep ngin[x]匹配到了nginx
但是grep那个进程是grep ngin[x],所以匹配不到
grep命令
⽀持的正则参数
支持的正则 |
描述 |
-E,–extended-regexp |
模式是扩展正则表达式(ERE) |
-P,–perl-regexp |
模式是perl正则表达式 |
-e,–regexp=PATTERN |
使用模式匹配,可指定多个模式匹配 |
-f,–file=FILE |
从文件每一行获取匹配模式 |
-i,–ignore-case |
忽略大小写 |
-l,–files-with-matches |
只匹配列出行所在的文件名 |
-w,–word-regexp |
模式匹配整个单词(精确匹配) |
-x,–line-regexp |
模式匹配整行,精确匹配 |
-v,–invert-match |
打印不匹配的行(取反) |
输出控制参数
输出控制 |
描述 |
-c,–count |
只打印每个文件匹配的行数 |
-h,–no-filename |
不输出文件名 |
-H,–with-filename |
打印每个匹配的文件名 |
-m,–max-count=NUM |
输出匹配的结果num数 |
-n,–line-number |
打印行号 |
-o,–only-matching |
只打印匹配的内容 |
-q,–quiet |
不输出正常信息 |
-r,–recursive |
递归目录 |
-s, --no-messages |
不输出错误信息 |
–include=FILE_PATTERN |
只检索匹配的文件 |
–exclude=FILE_PATTERN |
跳过匹配的文件 |
–exclude-from=FILE |
跳过匹配的文件,来自文件模式 |
–exclude-dir=PATTERN |
跳过匹配的目录 |
内容行控制参数
内容行控制 |
描述 |
-A,–after-context=NUM |
打印匹配的后几行 |
-B,–before-context=NUM |
打印匹配的前几行 |
-C,–context=NUM |
打印匹配的前后几行 |
–color[=WHEN], |
匹配的字体颜色 |
sed命令
语法
sed [选项] [sed内置命令字符] [输入文件]
选项参数
参数 |
描述 |
-n |
不打印模式空间 取消默认sed的输出,常与sed内置命令的-p连用 输出想要的内容 |
-e |
执行脚本,表达式来处理 |
-f |
执行动作从文件读取执行 |
-i |
修改原文件 直接修改文件内容,而不是输出到终端 |
-r |
使用扩展正则表达式和正则表达式 |
-i.bak |
在将处理的结果写入文件之前备份一份 |
内置参数
常用的:
-p |
全拼print,表示打印匹配行的内容,通常p会与选项-n一起使用※ |
-d |
delete 删除的意思 |
= |
显示行号 |
s |
替换 通常和g一起 |
g |
全局替换 |
a |
追加,添加 当前行追加文本 |
i |
当前插入 当前行上面插入文本 |
全部:
命令 |
描述 |
s /regexp/replac ement/ |
替换字符串 加上g 全局替换 |
a \text |
当前行追加文本 |
i \text |
当前行上面插入文本 |
c \text |
所选行替换新文本 |
b label |
分支到脚本中带有标签的位置,如果分支不存在则分支到脚本的末尾 |
d |
删除模式空间,开始下⼀个循环 |
D |
删除模式空间的第⼀⾏,开始下⼀个循环 |
g G |
复制/追加保持空间到模式空间 |
h H |
复制/追加模式空间到保持空间 |
I |
打印模式空间的⾏,并显示控制字符$ |
n N |
读取/追加下⼀⾏输⼊到模式空间 |
p |
打印当前模式空间 |
P |
打印模式空间的第⼀⾏ |
q |
⽴即退出 sed 脚本 |
r |
追加⽂本来⾃⽂件 |
t label |
如果 s///是⼀个成功的替换,才跳转到标签 |
w filename |
写⼊当前模式空间到⽂件 |
x |
交换模式空间和保持空间内容 |
= |
打印当前⾏号 |
: label |
label 为 b 和 t 命令 |
! |
取反、否定 |
& |
引⽤已匹配字符串 |
地址参数
地址 |
描述 |
first~step |
步⻓,每 step ⾏,从第 first 开始 |
$ |
匹配最后⼀⾏ |
/regexp/ |
正则表达式匹配行 |
number |
只匹配指定⾏ |
addr1,addr2 |
开始匹配 addr1 ⾏开始,直接 addr2 ⾏结束 |
addr1,+N |
从 addr1 ⾏开始,向后的 N ⾏ |
addr1,~N |
从addr1行开始,到N行结束 |
cut 列提取命令
[root@localhost ~]$ cut [选项] 文件名
选项:
-f 列号: 提取第几列
-d 分隔符: 按照指定分隔符分割列
-n 取消分割多字节字符
-c 字符范围: 不依赖分隔符来区分列,而是通过字符范围(行首为0)来进行字段提取。“n-”表示从第n个字符到行尾;“n-m”从第n个字符到第m个字符;“一m”表示从第1个字符到第m个字符。
--complement 补足被选择的字节、字符或字段
--out-delimiter 指定输出内容是的字段分割符
sort 排序命令
[root@localhost~]$ sort [选项] 文件名
选项:
-f: 忽略大小写
-b: 忽略每行前面的空白部分
-n: 以数值型进行排序,默认使用字符串型排序
-r: 反向排序
-u: 删除重复行。就是uniq命令
-t: 指定分隔符,默认是分隔符是制表符
-k n[,m]: ―按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
-h : 以人类可读显示
uniq 取消重复行
[root@localhost~]$ uniq [选项] 文件名
选项:
-i:忽略大小写
-c: 去重并统计出现的次数
wc 统计命令
[root@localhost~]$ wc [选项] 文件名
选项:
-l:只统计行数
-w:只统计单词数
-m:只统计字符数
seq
[root@zhangqifeng ~]# seq 5
1
2
3
4
5
[root@zhangqifeng ~]# seq 1 5
1
2
3
4
5
[root@zhangqifeng ~]# seq 2 5
2
3
4
5
[root@zhangqifeng ~]# seq 1 2 5 #2表示步长
1
3
5