系统相关
首页 > 系统相关> > shell编程-文本处理大全-printf-awk命令-sed命令-sort命令-uniq命令-wc命令-linux文本三剑客

shell编程-文本处理大全-printf-awk命令-sed命令-sort命令-uniq命令-wc命令-linux文本三剑客

作者:互联网

文本处理

1. 文本列提取–cut命令

cut命令
选项:
-f:指定提取第几列
-c:字符范围,-c n-,-n,n-m,分别表示第n个字符后,前n个字符,n到m个字符。
-d:指定字符分割,默认通过制表符"\t"分割
举个例子:
提取普通用户的用户名:
在这里插入图片描述

2. 文本三剑客之---->awk

2.1 printf 格式化输出

格式:
printf ‘输出类型格式’ 输出的内容
输出类型:

输出类型说明
%ns输出字符串,n是数字代表输出几个字符
%ni输出整数,n是数字,代表输出几个数字
%n.mf输出小数,m和n是数字,达标输出的整数位数和小数位数,
%8.2f表述,总共输出8位,其中两位是小数,6位是整数

输出格式:

输出格式说明
\a输出警告声音
\b输出退格键
\f清屏
\n换行
\t制表符,tab键
\r回车键

演示一下:
有一个文本如下:
在这里插入图片描述

2.2 awk基本使用

2.2.1 awk语法

语法:
awk ‘条件1{动作1} 条件2{动作2} ······’ 文件名

2.2.2 awk条件

我们来看一下awk的条件:

举几个例子,为了方便,我们先写了一个成绩文档:
在这里插入图片描述

cat chengji.txt |grep -v name|awk 'BEGIN{print "开始了"} {print $5} END{print "打印完成"}'

cat chengji.txt |grep -v name|awk '$4>=80{print $1}'

在这里插入图片描述
有点乱,简单解释一下逻辑:我们要的是分数,先排除掉标题行,awk在执行的时候,会先判断条件,如果条件符合,再执行动作,就是先判断第五列中那些分数高于80,再打印对应的name。


cat chengji.txt |awk '$1~/(fiona|hyg)/ {print $2 "\t" $4}'

在这里插入图片描述
回忆一下,//里面放的是正则表达式。



看完上面的内容,来稍微理解一下咱们这个awk的执行过程吧
在这里插入图片描述


2.2.3 awk内置变量

内置变量作用
$0当前读入的一整行数据
$nn是数字,表示分割出来的第几个字段,可以理解为第几列
FS指定分隔符
NR所在行号
NF分割出来的内容有几列

# 写法1,先筛选
cat /etc/passwd|grep "/bin/bash"|awk 'BEGIN{FS=":"}{print $1 "\t" $3 "\t" NR "\t" NF "\t"}'
# 写法2,用awk顺便筛选
awk 'BEGIN{FS=":"} /\/bin\/bash/{print $1 "\t" $3 "\t" NR "\t" NF "\t"}' /etc/passwd

在这里插入图片描述


3. 文本三剑客之 —>sed

主要用来将文本数据进行选取、替换、删除、新增的命令,sed可以卸载脚本里面
格式:
sed [选项] 动作 文件

3.1 sed选项

-n:我们通过sed命令会默认把所有数据输出到屏幕,该选项的作用是只输出sed处理过的文本
-e:允许对输入的数据用多条sed命令编辑,用分号分割。
-r:支持扩展正则
-i:sed是不会修改源文件的,改选项的目的是直接修改源文件

3.2 sed动作

a:追加,在当前行的后面添加一行或多行,如果添加多行,除了最后一行,需要加\ "na str"
c:行替换,用c后面的内容替换原数据行
i:插入,在当前行前插入一行
d:删除,删除指定行
p:打印:输出指定的行
s:字符串替换:"行范围s/旧字符串/新字符串/g"

3.3 sed实例

我们还是用passwd和上面的成绩单来举例吧~

sed -n 1p /etc/passwd  # 如果不加-n,会输出所有内容

在这里插入图片描述

4. 其他文本处理命令

4.1 sort命令

给文本内的数据排序
选项:

-f:忽略大小写
-b:忽略每一行前面的空白部分
-n:以数值型进行排序,默认是字符串
-u:删除重复行
-t:指定分隔符,默认是制表符
-r:取反
-k:按照指定字段排序

稍微举几个例子吧:
在这里插入图片描述
这个文本中间是空格,我们如果想要以数学成绩来排序,就要和awk来联动,我们试一下吧~
在这里插入图片描述
针对指定分割符,我们来试试passwd文件吧,按照uid进行排序,如果不加-n选项,排序会变成这样:0,1,11,12,13,···,2,20,21,···按照字符串的方式排
在这里插入图片描述

4.2 uniq命令

取消重复行,与sort -u 一样,试一下吧,我们变了一下成绩单:
在这里插入图片描述
在这里插入图片描述
大致分析一下,两个还是有区别的:

4.3 wc命令

用来统计文本信息的命令
选项:

-l:只查看行数--line
-w:只统计单词数--word
-m:只统计字符数--??

在这里插入图片描述
我们可以和cut,awk等命令得到春数字

标签:输出,文本处理,命令,sed,awk,print,文本,三剑客
来源: https://blog.csdn.net/qq_28197005/article/details/122486257