Linux文本处理

又复习了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

你可能感兴趣的:(Linux文本处理)