正则
1 grep过滤
正则表达式:
字符串 通过指定格式的字符串匹配指定的行 grep egrep sed awk
grep 过滤出指定的行
grep 'root' /etc/passwd 显示/etc/passwd中有root字符的行
grep --color 'root' /etc/passwd 以高亮度显示root字符的行
-n 显示所在行数(如:grep --color -n 'root' /etc/passwd)
alias cg='grep --color' 创建别名 (永久使用添加到 vim .bashrc 文件中)
-c 出现过滤字符的 行数有多少(cg -c 'root' /etc/passwd)
-v 显示没有过滤字符的所有内容
-A数字 显示过滤字符和字符下的几行内容,数字是几,显示几行(如:cg -A2 'root' /etc/passwd)
-B数字 显示过滤字符和字符上几行内容,数字指显示的行数
-C数字 显示过滤字符和字符上下几行内容都显示出来 数字是几 上下就显示几行
-r 显示过滤字符 的目录和目录文件下内容(如:cg -r 'iptables' /etc/*)
-rh 显示时不显示前面文件名,其余同上
grep -color '[0-9]' /etc/passwd 显示所有的带有数字的行 [0-9]实际时0到9的所有数字
类推 字母 等同样可以(如:[a-zA-z] 所有大小字母)
^表示以什么开头
grep --color '[1]' 1.txt 这里是以小写字母的开头的行
grep --color -v '[2]' 1.txt 显示不已字母开头的行
^放在[ ]内,显示不以[ ]中字符开头的行,(如: grep --color '[^0-9]' 1.txt 显示不以数字开头的行)
$ 指的是结尾 grep --color '^$' 1.txt 显示空行,grep --color -v '^$' 1.txt 显示空行以外的行
特殊符号:
. 指任意一个字符 (如:grep --color 'r.o' 1.txt 显示有任意r开头o结尾的 三个字符的所有行)
* 号前面的字符可以是没有也是可以有多个 (如:grep --color 'ro' 1.txt 显示的行可以没有r 或者有多个r)
.* 贪婪匹配 grep --color 'r.*o' 1.txt 显示任意一个r开头0结尾的所有行
? 0或1个?前面的字符 配合脱异字符\使用 (如:grep --color 'r?o' 1.txt 只能显示ro 或者o 的字符行)grep --color -E 'r?o' 1.txt (-E相当与使用\脱异符号)
grep -E == egrep
+ 一个或多个+号前面的字符(如:grep --color -E 'r+o' 1.txt 或者 egrep --color 'r+o' 1.txt)
. 任意字符
* 零个或多个 * 前面的字符
.* 任意个任意字符
? 零或一个?前面的字符
+ 一个或多个加前面的字符
或:egrep --color 'root|nologin' 1.txt 显示root或者nologin字符的行
与:grep --color 'root' 1.txt |grep --color 'nologin' 1.txt 显示root和nolongin字符的行
egrep --color '(rr)+' 1.txt 显示两次或者多次rr字符的行 成倍出现 2次rr 4次rr等
grep -color -E '(rr){1,3}' 1.txt 显示连续出现1到3次rr的行
grep -color -E '(rr){5}' 1.txt 显示连续出现5次rr的行
? + ( ) { } | 需要使用egrep或 grep -E或者使用脱异符号\
2 sed命令
sed -n '10'p 1.txt 打印第10行('1,10'p 打印1到10行 '20,$'p 第20行至结尾)
sed -n '/root/'p 1.txt 显示包含root的行('/r.o/'p 显示 r开头o结尾 的任意3个字符)
'/ro/'p
'/r.o/'p
'/r?o/'p
'/r+o/'p
'/root|nologin/'p
'/(rr)+/'p (以上正则表达式等同于grop下的功能,group下可使用的正则表达式sed 下同样可使用)
sed -r (-r 特殊符号不用脱异)==group -E
sed '/^$/'d 1.txt (删除空白的行)
sed '/[0-9]/'d 1.txt 删除所有数字的行
sed '/[a-zA-Z]/'d 1.txt 删除所有字母的行
sed '10,19'd 1.txt 删除10到19行(这里的删除并没有在文件中直接操作,只是显示内容中删除,需要删除在文件中生效-i 即可,如:sed -i '/[0-9]/'d 1.txt)
sed '1,10s/nologin/login/g' 1.txt 替换1到10行中的nologin为login g全局(只修改显示的内容 -i 替换文件中内容)
替换内容中有特殊字符 需要使用脱异字符脱异\ 或者 如sed '1,10s#sbin/nologin#login#g’ 1.txt
sed 's/nologin/login/g' 1.txt 全局替换
sed 's#^.$#login#g’ 1.txt 将所有行替换成login ^开头 .任意字符 $结尾
sed 's#^.$#& login#g’ 1.txt 将所有行后面添加 (空格)login
sed 's#[0-9]##g’ 1.txt 将所有数字删除(即 将数字替换成空)[a-zA-Z]删除字母
sed 's#[^0-9a-zA-Z]##g’ 1.txt 删除数字和字母以外的所有字符,空行会保留(^==非)
sed '-r s#([3]+)(:.😃(.$)#\3\2\1#g’ 1.txt 将每行:前的内容和最后:后面的内容调换
sed -n '/root/p; /aming/p' 1.txt 打印显示包含root或者是aming 的行(;表示有两个表达式 可理解; 类似或者)
sed -n -r '/user|aming/p' 1.txt == sed -n -e '/user/p' -e '/aming/p' 1.txt 显示user或者aming字符的行
3 awk命令
awk -F ':' '{print $3}' 1.txt 以:为分隔点 显示第3列
awk -F ':' '{print $3,$4}' 1.txt 以:为分隔点 显示第3、4列 中间以空格形式显示
awk -F ':' 'OFS=":"{print $3,$4}' 1.txt OFS 指定分隔符 第3 和第4行 之间以:显示分开
awk '/user/' 1.txt 显示有user 行
awk '/user|root/' 1.txt 显示有user和root 行(特殊符号,不用脱异)
/ro/ /r?0/ /r+o/ /r.o/ /(oo)+/ 支持 /(oo){2,10}/不支持
awk -F ':' '$1~/ro/' 1.txt 显示第一行 符合/ro/条件的行
awk -F ':' '$1~/ro/ {print $3}' 1.txt 显示第一行符合/ro/条件 行的第三列
awk -F ':' '$1~/ro/ {print $1,$3}; $1~/nobody/ {print $1,$3}' 1.txt 显示匹配$1~/ro/和 $1~/nobody/ 这两个条件行的 第1列和第3列(两个条件同时符合,会显示两次)
awk -F ':' '$1~/r*o|nobody/ {print $1,$3}' 1.txt 同上,同时符合这两个条件的只显示一次
awk -F ':' '$1"nobody"' 1.txt
awk -F ':' '$1"nobody" || $7~/nolog/' 1.txt
awk -F ':' '$3>=500' 1.txt 数字双引号去掉
awk -F ':' '$7!~"nolog"' 1.txt (~包含 !~不包含)
awk -F ':' '$1<$4' 1.txt
awk -F ':' '$1$4' 1.txt
awk -F ':' 'OFS=":";$1$4' 1.txt OFS打印出分隔符:需要有;
awk -F ':' 'NR10' 1.txt 显示第10行 NR<10 NR>10
awk -F ':' 'NR10 {print $1,$5}' 1.txt
awk -F ':' 'OFS=":" {if(NR10) print $1,$5}' 1.txt
awk -F ':' '{if (NF7) print $1' 1.txt 打印一共有7列 的行的第一列内容
awk -F ':' '{print $NR,$NF}' 1.txt
awk -F ':' 'OFS=":" {$7=$3+$4;print $0}' 1.txt
ark -F ':' '{(sum=sum+$3)};END {print sum}' 1.txt

浙公网安备 33010602011771号