linux中的字符截取命令

1、cut字段提取命令

cut [选项] 文件名
选项:
-f 列号:提取第几列
-d 分隔符:按照指定分隔符分割列(不指定分隔符的话是默认采用制表符分隔)

实例1:提取用制表符制作的文件信息

实例2:提取系统中的普通用户名称(指定的分隔符为冒号)

cut命令的不足:cut命令不能截取用不等的空格隔开的数据

综上,cut命令适合于提取比较规则的文件或用制表符分隔的文件,使用起来很简单,但对于用空格分隔的文本,cut命令就很无力,此时就需要使用awk命令。而在使用awk命令之前,必须先得学会使用printf命令。

2、printf命令

printf命令与字符提取没有本质的关系,但是它是学习使用awk命令的基础,它是一种输出语句,并且是一种最原始的输出命令(毕竟linux内核是使用c语言写的)。

printf的基本语法:

printf '输出类型输出格式' 输出内容    #类似于c语言中的printf函数

输出类型有:
%ns: 输出字符串。n是数字指代输出几个字符
%ni: 输出整数。n是数字指代输出几个数字
%m.nf: 输出浮点数。m和n是数字,分别指代浮点数的总位数(包含小数点)与小数部分的位数


输出格式:
\a:输出警告声音
\b:输出退格键,也就是Backspace键
\f:清除屏幕
\n:换行
\r:回车,也就是Enter键
\t:水平输出退格键,也就是Tab键-\v:垂直输出退格键,也就是Tab键

prinf不支持数据流操作:即不能跟管道符一起使用

可见printf的操作比较原始,虽然这个命令很麻烦,但因为awk命令只能使用printf及print命令,不能识别echo命令,所以必须掌握,print与printf相比,输出内容时,不用人为的添加换行符 。

3、awk命令

awk命令是linux系统中一个非常复杂,功能强大的命令,甚至支持在命令中嵌套流程控制语句,以至于在市面上有专门讲awk命令的书籍,但作为linux系统管理来说,我们掌握它的基本的字符提取功能就ok了,其他知识等参加工作后再边查阅资料边应用足矣。

awk '条件1{动作1}条件2{动作2}...' 文件名

条件(pattern):
一般使用关系表达式作为条件
x>10判断变量x是否大于10
x>=10大于等于
x<=10小于等于

动作(action):
格式化输出
流程控制语句

实例1:提取用制表符分隔内容的文件文本

可见,在实现相同功能的情况下:cut命令要简便的多。

awk命令的执行原理:

awk虽然是个字段提取命令,但awk是这样处理的:

awk首先会将文件的第一行读取出来,然后再awk中判断条件,如果条件满足,则会执行相应的动作,上面的例子由于没有加条件,所以每一行都会执行同第一行一样的动作。这个动作首先执行的动作是,首先将文件名student.txt赋给$0,然后$1是第一个字段,$2是第二个字段……

然后第二行也重复第一行的动作,将相应字段的内容提取到对应字段中

实例:提取根分区硬盘使用占比

BEGIN条件

awk 'BEGIN{printf "This is a transcript \n"}{printf $2 "\t" $4 "\n"}' student.txt

BEGIN条件会在所有输出的内容之上,先输出"This is a transcript"

类似的END条件会在所有的内容后输出"This is a transcript"

不加BEGIN或END的话,输出结果为:

FS内置变量

cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"}{printf $1 "\t" $3 "\n"}'

 

关系运算符:

#打印成绩大于70分的人员名单
cat student.txt | grep -v Name | awk '$4>=70{printf $2 "\n"}'

结果为:

4、字符替换命令sed

想让计算机自动替换文本,就不适合使用具有交互功能的vim等编辑器,sed命令就是这样一个再shell编程中自动替换文本的命令。sed命令是一种几乎包括在所有UNIX平台(包括linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。sed命令的格式为:

sed [选项] '[动作]' 文件名

选项:
-n:一般sed命令会把所有数据都输出到屏幕,如果加入此选项则只会把经过sed命令处理的行输出到屏幕。
-e:允许对输入的数据应用多条sed命令编辑
-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出

动作:
a:追加,在当前行后添加一行或多行
c:行替换,用c后面的字符串替换原数据行
i:插入,在当前行前插入一行或多行。
d:删除,删除指定的行
p:打印,输出指定的行
s:字串替换,用一个字符串替换另外一个字符串。格式为:"行范围s/旧字串/新字串/g"(和vim中的替换格式类似)

实例1:打印student.txt文件第二行的数据(注意加了-n与没加-n的区别)

实例2:删除student.txt文件第二行到第四行的数据,但不修改文件本身

实例3、在第二行前或第二行后加入数据

实例4、行替换c

字符串替换:

sed 's/旧字串/新字串/g' 文件名

sed -e 's/fengji//g;s/cang//g' student.txt
#同时把"fengj"和"cang"替换为空

实例5、字串替换s

实例6、-i可以改变原始文件内容

发布了54 篇原创文章 · 获赞 28 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览