Linux的文本三剑客awk、sed、grep及其他文本处理命令,详细解析

本文详细介绍了Linux系统的文本处理工具,重点讲解了文本三剑客awk、sed和grep的用途、语法、参数及用法。awk用于文本截取,能进行复杂的统计和数据处理;grep用于文本过滤,方便查找特定模式的行;sed擅长文本替换,支持整行替换和局部替换。此外,还提到了tr、tail、head、cat、more和less等其他文本命令的用途和用法。
摘要由CSDN通过智能技术生成

目录

一、文本三剑客

1.awk 文本截取

        1.用途

        2.完整语法

        3.分隔符

        4.内置变量

        5.流控

        6.函数

        7.数组

        8.求和 和 统计

2.grep 文本过滤

        1、用途

        2、语法

        3、常用选项

        4、用法

3.sed 文本替换

        1、用途

        2、语法

        3、常见参数

        4、动作

        5、使用

        6、&

二、其他文本命令

1.tr 命令

        1、用途

        2、用法

        3、参数

        4、用法

2.tail

        1、用途

        2、用法

        3、参数

        4、使用

3.head

        1、用途

        2、语法

        3、参数

        4、用法

4.cat

        1、用途

        2、语法

        3、参数

        4、用法

5.more

        1、用途

        2、语法

        3、参数

6.less


一、文本三剑客

1.awk 文本截取

        awk是一组编程语言,gawk - pattern scanning and processing language,打印匹配扫描和处理语言的行 。

        1.用途

        awk可用于过滤、截取、统计

        2.完整语法

        awk  ‘BEGIN(commands)pattern{commands}END{commands}’   file1

        3.分隔符

        awk的默认分隔符是空白,分隔符分为输入分隔符和输出分隔符。

        输入分隔符:

  •   默认为空白(空格和tab键)
  •     -F  指定分隔符
  •     FS  输入分隔符变量

        输出分隔符:

  •   默认为一个空格
  •     OFS=" " 输出分隔符变量( output field separator)

        举例

        以  /etc/passwd 文件为例,注意要修改重要文件一定要记得备份~~

  •   -F   和   OFS
1、-F
[root@zabbix linux-test]# awk -F: '{print $1,$7}' /etc/passwd |head
root /bin/bash
root /bin/bash
bin /sbin/nologin
bin /sbin/nologin
daemon /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
lp /sbin/nologin

2、OFS
[root@zabbix linux-test]# awk -F: 'OFS="#"{print $1, $3,$7}' /etc/passwd
root#0#/bin/bash
root#0#/bin/bash
bin#1#/sbin/nologin
bin#1#/sbin/nologin
......

3.原passwd文件
[root@zabbix linux-test]# cat passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
......

命令解析: 

        1. awk -F: '{print $1,$7}' /etc/passwd |head   

        指定  “:” 为分隔符 ,取第一列和第七列,head默认取前10行。

        2. awk -F: 'OFS="#"{print $1, $3,$7}' /etc/passwd

        以分号为分隔符,截取第1,3,7列,并且指定输出的分隔符为 #。

        4.内置变量

  • OFS  输出分隔符变量  output field separator
  • FS    输入分隔符变量   input field separator
  • NF   每行$0的字段数   number field
  • NR   当前处理的行号

使用:

1、显示passwd文件的第5行和第10行的行号和用户名
[root@nginx-kafka01 linux-text]# awk -F':' 'NR==5 ||NR==10{print NR,$1}' /etc/passwd
5 daemon
10 lp

2.
[root@nginx-kafka01 linux-text]# awk -F: 'BEGIN{num=0;print "start"}$1 ~/^chen/&&$3>2000 ||$NF ~ /bash/ {print NR, NF, $1, $3, $(NF-1),$NF;num++}END{print "行数:"num}'  /etc/passwd
start
1 7 root 0 /root /bin/bash
2 7 root 0 /root /bin/bash
41 7 chenyulin 1000 /home/chenyulin /bin/bash
42 7 chenyulin 1000 /home/chenyulin /bin/bash
43 7 echo 1001 /home/echo /bin/bas
.......
行数:36

        5.流控

        ① if

        语法:if (condition) statement1

        单分支:

[root@zabbix linux-test]# awk -F: '{if($1 ~ /chen/)print "chenjie";else print "ge" }' /etc/passwd
ge
ge
......
chenjie
chenjie
.....

命令解析: 

        awk -F: '{if($1 ~ /chen/)print "chenjie";else print "ge" }' /etc/passwd

         在 /etc/passwd 内寻找chen 如果找到了陈输出chenjie,否则就输出ge。

        多分支:

[root@zabbix linux-test]# awk -F: '{if ($3==0) {num++;print $1"是超级用户"} else if ($3>1&& $3<1000) num2++;else num3++}END{print "超级用户的数量是:"num,"系统用户的数量是:"unm2, "普通用户的数量是:"num3}'  /etc/passwd
root是超级用户
root是超级用户
超级用户的数量是:2 系统用户的数量是: 普通用户的数量是:38

 命令解析:

        在 passwd 文件里面,对$3(第三列)进行判断,如果等于0就是超级用户,在3~1000之间就是系统用户,否则就是普通用户,在里面定义了三个变量,分别对三个判断的数量进行计数。

        ② for

        语法:for (i in array){print array[i]}  或者  for (i=0;i<10;i++){print $i}

1、
[root@zabbix ~]# awk -F: '{split($6,home,"/");for (i in home)print i,home[i]}' /etc/passwd
1 
2 home
3 zhao
1 
2 home
3 feng
1 
2 home
3 feng

2、
[root@zabbix ~]#  awk -F: '{split($6,home,"/");for (i=2;i<4;i++)print i,home[i]}' /etc/passwd
2 home
3 zhao
2 home
3 zhao
2 home
3 feng
2 home
3 feng

 命令解析:

        1、这两条命令都使用了split函数进行分割,split的用法 split(s, a [, r [, seps] ]),第一个命令是以“:”为分隔符,截取$6,$6再使用split将$6进行分割,分割成home和分隔符“/”,再进行循环i在home里面就打印出home。

        2、这条命令与第一条差不多,解释参考第一条命令。

        6.函数

        常用的函数有下列几个:

  • length    统计长度
  • spilt       切割
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值