一、正则表达式

二、字符截取命令

字符截取命令和grep的区别:grep提取的是行,cut和awk提取列,这几个命令经常混合使用

1、cut字符提取命令

命令:cut

格式:cut [选项] [文件名]

选项:

  • -f [列号]:提取第几列
  • -d "[分隔符]":按照分隔符分割列

想提取多列,则多个列号间用逗号隔开即可,如:cut -f 2,4 [文件名]

注:

  1. cut默认的分隔符是制表符,也就是说,第几列是按制表符算的,如果文件没有用制表符,就不能用默认格式cut -f n来分割,应用cut -d [分隔符] -f n 来指定分隔符
  2. cut命令一般只用于提取有明显分割符(制表符,冒号等)的文件,而有的文件是以多个空格分割的,这种只能用后面的awk命令提取。

实际运用:比如要写一个Shell脚本批量删除普通用户,删除用户只需要用户名,所以我们在/etc/passwd里提取出普通用户的用户名这一列即可。

具体步骤:

  • cat /etc/passwd | grep /bin/bash ,因为我们要删除的是普通用户,在passwd文件里表示普通用户(以及root用户)的是它的登陆shell为/bin/bash(root用户和普通用户登陆shell为/bin/bash)
  • 要删普通用户——不包含root用户:cat /etc/passwd | grep /bin/bash | grep -v root
  • 加上用cut以:作为分隔符提取第一列:cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1
  • 成功提取到我们想要的用户名,之后写shell脚本用循环删除用户即可

2、printf格式化输出命令

语法:printf '[输出类型 输出格式]' [输出内容]

输出类型:

  • %ns:输出字符串,n代表输出几个字符
  • %ni:输出整数,n代表几个数字
  • %m.nf:输出浮点数,m代表总输出位数,n代表小数位数

输出类型:

  • \a:输出警告声音
  • \b:输出退格(Backspace)
  • \f:清楚屏幕
  • \n:换行
  • \r:回车
  • \t:水平制表符(Tab)

例如:

3、awk命令

awk远比cut复杂,建议有明确分隔符的都用cut分割,而cut分割不了的,像以多个空格分割的文件,再用awk分割。

awk很复杂,但功能特别强大

4、sed命令

三、字符处理命令

1、排序命令 sort

语法:sort (选项) [文件名]

选项:

  • -f : 忽略大小写
  • -n : 以数值型进行排序(默认以字符串型排序)
  • -r : 反向排序
  • -t “[符号]” : 指定分隔符(默认分隔符是制表符)
  • -k n(,m):按照指定的字段范围排序,从第n字段开始,m字段结束(默认到行尾)

比如:只排序用户的UID(/etc/passwd以:分割的第三个字段):sort -t ":" -k 3,3 /etc/passwd

可以看到1开头的11、12排在了2和3前面,这时因为sort默认以字符串进行排序,若想帮这个字段当数字进行排序,要再前面加上-n后缀 :sort -n -t ":" -k 3,3 /etc/passwd