这里使用的测试文件是 linux /etc/passwd 文件, 最好是复制一份进行练习, 方式对文件内容造成损坏感觉还是要多练习才能很好的使用, 习题这里就不贴了, 网上一找一大把
grep:
-o 用作计算出现多少次字段
-c 打印符合要求的行数
-n 在输出符合要求的行的同时也打印行号
-v 打印不符合要求的行
-A 后跟一个数字 ps -A2 表示打印符合要求的行及下面两行
-B 后跟一个数字 ps -B2 表示打印符合要求的行及上面两行
-C 后跟一个数字 ps -C2 表示打印符合要求的行及上下各两行
-r 会把目录下面的所有文件全部遍历
过滤出带有某个关键字的行并且输出行号 grep -n root passwd
过滤出不带有某个关键字的行并且输出行号 grep -n -v root passwd
过滤出所有包含数字的行并且输出行号 grep -n [0-9] passwd
过滤出所有不带有数字的行 grep -n -v [0-9] passwd
去除所有以 #号开头的行: grep -n -v ^# passwd
去除所有以 #号和空行: grep -v ^#|grep -v ^$
过滤出以非数字开头的行 grep ^[^0-9] 1.txt
过滤出所有以英文字母开头的行 grep [a-zA-Z] passwd
过滤任意一个或多个字符 grep r.o passwd;grep r*t passwd; grep r.*t passwd
^ 一般表示开头, 但是当在 [^] 时候会表示排除字符)
[^a]表示匹配除了 a 的任意字符
[^a-zA-Z0-9]表示找到一个非字母也非数字的字符
[\^abc]表示找到一个插入符或者 a 或者 b 或者 c
[^\^]表示找到除了插入符外的任意字符
* 0 个或多个 * 前面的字符
. 任意一个字符(包括多个字符)
? 表示 0 个或一个? 前面的字符
+ 表示一个或多个 + 前面的字符
.* 表示任意字符不限制数量
注意:
+ ? | grep 不支持(要使用 - E 选项),egrep 才支持
(oo)* 0 个或多个 oo
(oo){1,2} 表示大于 1 次或 2 次
sed:(-n 和 p 组合, 其他不用)
打印指定行 sed10p - n passwd;
- sed1,
- 4p - n passwd;
- sed5,
$p - n 1.txt 打印包含某个字符串的行 sed - n / root / ppasswd 可以使用 ^ . * $ - e 可以实现同时进行多个任务 sed - e / root / p - e / body / p - n passwd 也可以用; 隔开实现 sed / root / p;
/body/p - n passwd 删除行 sed / root / dpasswd;
- sed1dpasswd;
- sed1,
10dpasswd 替换 sed1,
2s / ot / to / gpasswd 其中 s 是替换的意思, g 是全局替换, 否则只是替换一次, / 也可以为 #,@等删除所有的数字 seds / [0 - 9] //g passwd
删除所有的非数字 sed / [ ^ 0 - 9] //g passwd
调换 2 个字符串的位置 head - n2 passwd | seds / \ (root\)\ (. * \)\ (bash\) / \3\2\1 / 直接修改文件内容 sed - is / ot / to / gpasswd seds / [a - z] / \u & /g passwd 将小写字母全局转换为大写字母
sed s/ [A - Z] / \l & gpasswd 将大写字母全部转换为小写字母
awk:
截取文档中的某段 awk -F : {print $1} passwd
也可以使用自定义字符串连接每个段 awk -F : {print $1"#"$2"#"$3"#"$4} passwd
匹配字符或者字符串 awk /oo/ passwd
针对某个段匹配 awk -F : $1~/oo/ passwd
多次匹配 awk -F : /root/ {print $1,$3};$1 ~/test/;$3 ~/20/ passwd
条件操作符: ==> <!=>= <=
- awk -F : $3==0 passwd
- awk -F : $3>500 passwd
- awk -F : $7!="/sbin/nologin" passwd
- awk -F : $3<$4 passwd
- awk -F : $3>$5 && $3<$7 passwd
- awk -F : $3>$4 || $7="/bin/bash" passwd
awk 内置变量 NF(段数) NR(行数)
head -n3 1.txt | awk -F : {print NF}
head -n3 1.txt | awk -F : {print $NF} 显示最后一段
head -n3 1.txt | awk -F : {print NR} 显示行数
打印 20 行之后的行 awk NR>20 passwd
awk -F : NR>20 && $1~/ssh/ passwd
更改某个字段的值 awk -F : $1="root" passwd
数学计算, 把第三段和第四段的值相加, 并且赋予第七段
awk -F : {$7=$3+$4;print $0} passwd
计算第三段的总和 awk -F : {(tot=tot+$3)}; END {print tot} passwd
awk 中也可以使用 if 关键词 awk -F : {if($1=="root")print $0} passwd
来源: http://www.bubuko.com/infodetail-2546080.html