Shell编程之正则表达式-awk工具使用

文章目录

一、Shell编程之正则表达式-awk工具使用

1、awk的内建变量

awk 包含几个特殊的内建变量(可直接用)如下所示:

  • FS:指定每行文本的字段分隔符,默认为空格或制表位。
  • NF:当前处理的行的字段个数。
  • NR:当前处理的行的行号(序数)。
  • $0:当前处理的行的整行内容。
  • $n:当前处理行的第 n 个字段(第 n 列)。
  • FILENAME:被处理的文件名。
  • RS:数据记录分隔,默认为\n,即每行为一条记录。

2、查找出/etc/passwd的用户名、用户ID、组ID

awk -F: ‘{print $1,$3,$4}’ /etc/passwd

mark

3、输出所有内容,等同于cat test.txt

awk ‘{print}’ test.txt

mark

4、输出所有内容,等同于cat test.txt

awk ‘{print $0}’ test.txt

mark

5、输出第1~3行内容

awk ‘NR==1,NR==3{print}’ test.txt

mark

6、输出第1~3行内容

awk ‘(NR>=1)&&(NR<=3){print}’ test.txt

mark

7、输出第1行、第3行内容

awk ‘NR==1||NR==3{print}’ test.txt

mark

8、输出所有奇数行的内容

awk ‘NR%2==1{print}’ test.txt

mark

9、输出所有偶数行的内容

awk ‘NR%2==0{print}’ test.txt

mark

10、输出以root开头的行

awk ‘/^root/{print}’ /etc/passwd

mark

11、输出以nologin结尾的行

awk ‘/nologin$/{print}’ /etc/passwd

mark

12、统计以/bin/bash结尾的行数

等同于grep -c “/bin/bash$” /etc/passwd

awk ‘BEGIN {x=0};//bin/bash$/{x++};END {print x}’ /etc/passwd

mark

13、统计以空行分隔的文本段落数

awk ‘BEGIN {RS=""};END{print NR}’ test.txt

mark

14、输出每行中(以空格或制表位分隔)的第3个字段

awk ‘{print $3}’ test.txt

mark

15、输出每行中的第1、3个字段

awk ‘{print $1,$3}’ test.txt

mark

16、输出密码为空的用户的shadow记录

awk -F: ‘$2==""{print}’ /etc/shadow

mark

17、输出密码为空的用户的shadow记录

awk ‘BEGIN{FS=":"};$2==""{print}’ /etc/shadow

mark

18、输出以冒号分隔且第7个字段中包含/bash的行的第1个字段

awk -F: ‘$7~"/bash"{print $1}’ /etc/passwd

mark

19、调用wc -l命令统计使用bash的用户个数

第同于grep -c “bash$” /etc/passwd

awk -F: ‘/bash$/{print| “wc -l”}’ /etc/passwd

mark

20、调用w命令,并用来统计在线用户数

awk ‘BEGIN {while (“w” | getline) n++;{print n-2}}’

mark

21、调用hostname,并输出当前的主机名

awk ‘BEGIN {“hostname” | getline;print $0}’

mark

22、sort工具的常用选项

  • -f:忽略大小写;
  • -b:忽略每行前面的空格;
  • -M:按照月份进行排序;
  • -n:按照数字进行排序;
  • -r:反向排序;
  • -u:等同于 uniq,表示相同的数据仅显示一行;
  • -t:指定分隔符,默认使用[Tab]键分隔;
  • -o <输出文件>:将排序后的结果转存至指定文件;
  • -k:指定排序区域。

23、将/etc/passwd文件中的帐号进行排序

sort /etc/passwd

mark

24、将/etc/passwd文件中第三列进行反向排序

sort -t ‘:’ -rk 3 /etc/passwd

mark

25、将/etc/passwd文件中第三列进行排序,并输出内容保存至user.txt文件中

sort -t ‘:’ -k 3 /etc/passwd -o user.txt

cat user.txt

mark

26、uniq工具常用选项

  • -c:进行计数;
  • -d:仅显示重复行;
  • -u:仅显示出现一次的行。

27、删除文件中重复行

uniq testfile
mark

28、删除文件中的重复行,并在行首显示该行重复出现的次数

uniq -c testfile
mark

29、查找文件中的重复行

uniq -d testfile
mark

30、tr工具常用选项

  • -c:取代所有不属于第一字符集的字符;
  • -d:删除所有属于第一字符集的字符;
  • -s:把连续重复的字符以单独一个字符表示;
  • -t:先删除第一字符集较第二字符集多出的字符。

31、将输入字符由大写转换为小写

echo “KGC” | tr ‘A-Z’ ‘a-z’
mark

32、压缩输入中重复的字符

echo “thissssss is a test linnnnnnnnne.” | tr -s ‘sn’
mark

33、删除字符串中某些字符

echo “hello world” | tr -d ‘od’
mark

猜你喜欢

转载自blog.csdn.net/weixin_39608791/article/details/107672991
今日推荐