linux三剑客&正则 速查
写在前面, 根据日常使用会持续更新
正则表达式
基础正则
$ 以什么结尾 grep root$ file 查找以root结尾的
^ 以什么开头 grep ^root file 查找以root开头的
. 匹配任何一个字符
* 匹配前面一个字符或者表达式0次或者任意次 grep y*root file 查找root前有0个或者任意个y
[] 匹配括号中的任意一个字符, 注意是一个 grep ro[bdo]t file 查找robt rodt root
[^] 不匹配括号里面的字符 grep
\ 转义符
{n} 使前面字符出现n次 grep "g\{3\}" file 注意:这里的花括号要转移, 并且最外侧加双引号
{n,} 使前面的字符出现不少于n次
{n,m} 使前面的字符至少出现n次, 最多m次
扩展正则
扩展正则必须使用egrep 或者 grep -E **
+ 匹配前面的字符一次或者多次 grep -E g+d file 匹配gd ggd gggd等
? 匹配前面的一个字符0次或者一次
| 或匹配 grep -E my|me file 把包含my或者包含me的都输出
() 将()里面的当作一个整体 比如grep -E (djw)? 匹配一次djw或者0次
grep
grep -r xxx ./
grep -rn xxx ./
grep -rni xxx ./
grep -v xxx file
grep -c xxx file
#格式
grep | |
---|---|
-i | 不区分大小写 |
-v | 取反 或者叫反向输出 |
-w | 以单词为单位进行过滤 |
-B | 指定行数,过滤指定内容以及上几行 |
-A | 指定行数,过滤指定内容以及下几行 |
-C | 指定行数,过滤指定内容以及上下各几行 |
-o | 只输出过滤的内容 |
-c | 统计过滤的行数 |
-n | 显示行号 |
-E | 使用扩展正则 |
-r | 递归查找目录 |
sed
作用: 修改文件的特定位置
sed | 作用 |
---|---|
-n | 只输出处理的行 |
-i | 直接修改文件内容,编辑文件 谨慎使用 |
-e | 指定多个sed内置操作,现在不常用,多个sed内置操作可以使用分号隔开 |
-r | 支持扩展正则表达式 |
# 对每行匹配到的第一个字符串进行替换
sed -i 's/原字符串/新字符串/' ab.txt
# 对全局匹配上的所有字符串进行替换
sed -i 's/原字符串/新字符串/g' ab.txt
# 删除所有匹配到字符串的行
sed -i '/匹配字符串/d' ab.txt
# 特定字符串的行后插入新行
sed -i '/特定字符串/a 新行字符串' ab.txt
# 特定字符串的行前插入新行
sed -i '/特定字符串/i 新行字符串' ab.txt
# 把匹配行中的某个字符串替换为目标字符串
sed -i '/匹配字符串/s/源字符串/目标字符串/g' ab.txt
# 在文件ab.txt中的末行之后,添加bye
sed -i '$a bye' ab.txt
# 对于文件第3行,把匹配上的所有字符串进行替换
sed -i '3s/原字符串/新字符串/g' ab.txt
sed -n ‘2p’ a.txt #打印第二行 (2)
sed -n ‘2,5p’ a.txt #打印第二行到第五行(2,3,4,5)
sed -n ‘2p;5p’ a.txt #打印第二行和第五行(2,5)
sed -n ‘3,$p’ a.txt #打印第三行到最后一行(3,4,5,6,7,8,9,10)
sed -n ‘1~2p’ a.txt #打印指定步长为2,所以打印的是1、3、5、7…行 (1,3,5,7,9)
sed -n ‘1,+2p’ a.txt #打印第1行到第1+2行,也就是1到3行(1,2,3)
sed '3d' a.txt #输出删除第三行的内容
awk
文本处理, 或是报表生成
ps aux | awk '{print $2}' #输出第二列
awk 'NR==1 || NR==3{print}' file #输出第一行和第三行
awk '(NR%2)==1{print}' file #输出所有奇数行的内容
awk '/^qwer/{print}' file #输出qwer开头的行
awk '/qwer$/{print}' file #输出qwer结尾的行
awk 'BEGIN {x=0} ;/\/bin\/bash$/{x++};END {print x}' /etc/passwd #输出以/bin/bash 结尾的有几行