又复习了grep、sed和awk三剑客,记下有用的点
-
grep 精确匹配,需要加上
\>
grep -E "\>([0-9]{2,3})\>" file
-E表示扩展正则
表示匹配数字至少两次、至多三次,前后均为精确匹配,不能有多余字符
-
显示行号:
-n
;统计次数:-c
;最多匹配次数:-m
-
匹配一个或多个空格字符开头
grep -E "^[[:space:]]+"
-
匹配以大写I或小写i开头的行
grep -E "^(I|i)"
或者grep -i "^i"
再或者grep "^[Ii]"
上面的
-i
表示忽略 大小写
-
只打印出含有匹配内容的文件名:
grep -L "whatever_you_want"
root:/jewpjge:/jfopewijf:/usr/root
ajog:fjeio:jfeopwf:fjeopw:ajog
fjeowap:fjaioi:fjwpeo:jfpow:a
找出首尾单词相同的行?
grep -E "^([^:]+\>).*\1$" file
小括号内表示一个组,中括号内^表示反向匹配,后面\1表示小括号内的东西。.*表示中间可以是任何内容
sed取消默认输出-n,多次替换-e,只打印替换后的内容
sed -n -e '1,10s/bin/C/gp' -e 's/a/b/gp' file
删除以root开头的行到ftp开头的行之间的所有行
sed '/^root/,/^ftp/d' file
一次多个条件,加个分号即可。比如删除以a开头、b开头的行
sed 's/^a/d;/^b/d' file
给第一到三行加上注释符号“#”
sed '1,3s/(.*)/#\1/' file
awk 同时使用多个分隔符
awk -F '' [ :]
上面就是同时指定了空格
和:
为分隔符
修改输出分隔符
awk -v OFS="," ' $2~/^D/{print $1}' file
参考:https://www.bilibili.com/video/BV1eY4y1H7uq?p=12&spm_id_from=pageDriver