Shell——文本处理命令

Shell——文本处理命令

1、cut

cut 命令用于显示每行从开头算起 num1 到 num2 的字符,字节和字段,并将这些字符,字节和字段输出。

语法格式

cut [参数] 文件名

参数:

  • -c :以字符为单位进行分割,后面加n表示取第几列,如-c 3。
  • -d :自定义分隔符,默认分隔符为制表符“\t”
  • -f :指定提取第几列。

使用实例

以空格为分隔符,截取并输出文本cut.txt的第一列字符:

[root@haoming home]# cat cut.txt 
jin mao
jing xian
ling xia
long cai
chi neng
lan chi
fen ji
[root@haoming home]# cut -d " " -f 1 cut.txt
jin
jing
ling
long
chi
lan
fen

结合管道符的使用:搜索passwd文件,以冒号为分隔符,截取第1,6,7列

[root@haoming home]# cat /etc/passwd |grep bash$
root:x:0:0:root:/root:/bin/bash
mysql:x:997:1001::/home/mysql:/bin/bash
es:x:1001:1002::/home/es:/bin/bash
[root@haoming home]# cat /etc/passwd | grep bash$| cut -d ":" -f 1,6,7
root:/root:/bin/bash
mysql:/home/mysql:/bin/bash
es:/home/es:/bin/bash

结合管道符的使用:以冒号为分隔符,截取第三个冒号前面的所有列:

  • cut -d ":" -f -3:截取第三个冒号前面的所有列
  • cut -d ":" -f 3-:截取第三列往后所有列
[root@haoming home]# cat /etc/passwd | grep bash$| cut -d ":" -f -3
root:x:0
mysql:x:997
es:x:1001

2、awk

awk 命令是逐行扫描文件(从第 1 行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理。

语法格式

 awk [参数] '脚本命令' 文件名

参数:

  • -F fs : 指定以 fs 作为输入行的分隔符,awk 命令默认分隔符为空格或制表符。

  • -f file : 从脚本文件中读取 awk 脚本指令,以取代直接在命令行中输入指令。

  • -v var=val : 在执行处理过程之前,设置一个变量 var,并给其设备初始值为 val。

使用实例

以冒号为分隔符,搜索passwd文件中以root开头的所有行,并输出行的第一列和七列,并以逗号分割:

[root@haoming home]# cat /etc/passwd | awk -F ":" '/^root/{print $1","$7}'
root,/bin/bash
  • $0 代表整个文本行

  • $n 代表文本行中的第 n 个数据字段

BEGIN 和 AND关键字

BEGIN 会强制 awk 在读取数据前执行该关键字后指定的脚本命令

END 会在awk读完数据后执行该关键字后指定的脚本命令

awk 'BEGIN {print "USERNAME"}
awk 'BEGIN {
    
    print "PASSWORD"}

-v 自定义变量的使用

把所有的用户id加上指定的数 i:

-v i=1:定义变量i,初始值为1,这样脚本命令中的变量 i 就不用修改,在外面修改 i 的值即可

#查询所有的用户id
[root@haoming home]# cat /etc/passwd | awk -v i=1 -F ":" '{print $3}'
0
1
2
3
4
5
6
7
997
1001
996
#所有的用户id+1
[root@haoming home]# cat /etc/passwd | awk -v i=1 -F ":" '{print $3+i}'
1
2
3
4
5
6
7
8
998
1002
997
#所有的用户id+5
[root@haoming home]# cat /etc/passwd | awk -v i=5 -F ":" '{print $3+i}'
5
6
7
8
9
10
11
12
1002
1006
1001

猜你喜欢

转载自blog.csdn.net/wpc2018/article/details/125441394