【Shell编程】字符截取命令awk、sed命令

简介: 【Shell编程】字符截取命令awk、sed命令

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>1{print $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

效果图:

目录
相关文章
|
28天前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
56 20
|
1月前
|
安全 Shell 数据处理
使用Python执行Shell命令并获取结果
在实际应用中,可以根据需要选择适当的参数和方法来执行Shell命令,并处理可能出现的各种情况。无论是系统管理、自动化任务还是数据处理,掌握这些技巧都将极大地提高工作效率。
64 12
|
3月前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
356 7
|
3月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
86 1
|
4月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
107 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
5天前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
59 32
|
3月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
127 1
|
3月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
129 2
|
3月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
103 2
6种方法打造出色的Shell脚本
|
3月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。