Shell编程字符截取命令awksed命令

Posted 林夕07

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell编程字符截取命令awksed命令相关的知识,希望对你有一定的参考价值。

系列文章

【Shell编程】Shell中的正则表达式
【Shell编程】字符截取命令cut、printf命令


目录

awk命令

功能

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
awk是先读取一行数据再执行条件,默认分隔符是空格个制表符。

语法

awk ‘条件1动作一 条件2动作2 …’ 文件名

条件

一般使用关系表达式

x>10判断变量x是否大于10
x>=10大于等于
x<=10小于等于

动作

  1. 格式化输出
  2. 流程控制语句

实例

测试文本

这里的学生表文本和上面类似中间空格也必须要用tab,且tab要一样多


还有一个是测试文本是姓名、年龄、性别的一个1.txt文本文件。

打印大于1行的所有内容

NR:表示行号
$0:表示整行**

命令:awk 'NR>1print $0' 1.txt

效果图:

打印最后一列

NF:表示最后一列

命令:awk -F' ' 'print $(NF)' 1.txt

效果图:

输出文本的第二列和第六列

命令:awk 'printf $2 "\\t" $6 "\\n"' student.txt

效果图:

输出空格分隔的文本

命令:df -h | awk 'print $1 "\\t" $5 "\\t" $6'

效果图:

测试根分区占用超过80没有并提取根分区占用数字

命令:df -h | grep sda2 | awk 'print $5' | cut -d "%" -f 1

效果图:

条件:BEGIN

会在输出结果前,先执行一个动作 仅仅·1执行一次

命令:awk 'BEGIN print "test !!" print $2 "\\t" $5' student.txt

效果图:

FS内置变量

awk是先读取一行数据再执行条件

所以我们需要让FS先执行

END

在命令最后执行

关系运算符

当第六列成绩大于等于87就输出名字

在awk命令的输出中支持print和printf命令

  • print :会在每一个输出之后自动加入一个换行符(Linux默认没有print
  • printf :是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符。

sed命令

功能

sed命令是一种几乎包含在所有unix平台(包括Linux)的轻量级流编辑器,sed主要是用来将数据进行选取、替换、删除、新增的命令。

语法

sed [选项] ‘[动作]’ 文件名

参数

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

动作

参数说明
a\\追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用“\\”代表数据未完结
c\\行替换,用c后面的字符穿代替原数据行,替换多行时,除最后一行外,每行末尾需要用“\\”代表数据未完结
i\\插入,在当前行前插入一行或者多行,插入多行时,除最后一行外,每行末尾需要用“\\”代表数据未完结
d删除,删除指定行
p打印,输出指定行
s字串替换,用一个字符串替换另外一个字符串,格式为:“行范围s/旧字串/新字串/g”(和vim中替换有点相似)

实例

测试文本

文件名为student.txt

多打印一遍第二行

命令:sed '2p' student.txt

效果图:

只打印第二行

-n只会只打印你需要的
命令:sed -n '2p' student.txt

效果图:

配合管道符

命令:df -h | sed -n '2p'

效果图:

删除第2行到第4行的数据

命令:sed '2,4d' student.txt

效果图:

在第二行后面追加字符串

命令:sed '2a hello' student.txt

效果图:

在第二行前面插输入俩行数据

命令:sed '2i hello \\ world' student.txt

效果图:

替换第二行的数据

命令:sed '2c No such' student.txt

效果图:

第一行前面插入 haha

命令:sed 'lihaha' student.txt

效果图:

第一行后面插入 haha

命令:sed 'lahaha' student.txt

效果图:

将字符串中的“张三”替换为hi

命令:sed ‘s/张三/hi/g’ 1.txt

效果图:

将第一行替换为hello

命令:sed ‘1chello’ 1.txt

效果图:

只显示第一行和第三行

命令:sed -n ‘1p;3p’ 1.txt

效果图:

删除第一行

命令:sed -n ‘1d’ 1.txt

效果图:

输出第一行到第三行

命令:sed -n ‘1,3p’ 1.txt

效果图:

删除第一行到第二行

命令:sed -n ‘1,2d’ 1.txt

效果图:

以上是关于Shell编程字符截取命令awksed命令的主要内容,如果未能解决你的问题,请参考以下文章

Shell编程字符截取命令cutprintf命令

第10章 Shell编程_字符截取命令

shell 去空格,去掉字符串前后空格(awksed eval)

Shell编程 之 字符截取命令

Shell编程之字符截取命令

Linux Shell编程 - 字符截取命令