linux的学习(七):读取,函数,正则表达式,文本处理工具cut和awk

news/2024/8/26 13:31:54 标签: linux, 学习, 正则表达式

##简介
shell编程中的读取,函数,正则表达式,文本处理工具的简单使用

read

read:读取控制台的输入
参数:

  • -p:指定读取时的提示符
  • -t:等待读取的时间

脚本例子

编写i.sh脚本,enter your name:提示用户在控制台输入,如果5秒未输入自动执行退出

#!/bin/bash
read -t 5 -p "enter your name:" name
echo "hello,$name"

. i.sh运行脚本
在这里插入图片描述

函数

分为系统函数和自定义函数

系统函数

系统自带的一些,但是感觉使用起来和命令差不多

basename

basename:截取文件名
可带参数 suffix:后缀,会去掉文件名的后缀

basename /tmp/a.txt .txt

在这里插入图片描述

dirname

dirname:获得文件的路径,不包括文件名

dirname /tmp/a.txt

在这里插入图片描述

自定义函数

语法

方法名()
{
方法体
}
在脚本中编写方法:

#! /bin/bash
function add(){
s=$[ $1 + $2 ]
echo $s
}
read -p "enter first numnber: " a
read -p "enter second number: " b
add $a $b

这个脚本就是提示用户输入a,b两个参数
add $a $b调用方法,传入a,b变量
运行结果:
在这里插入图片描述

正则表达式

对自己想要的字符或者文本做模糊式的匹配搜索,就使用正则表达式写一个匹配的规则。
linux中很多的文本工具都是支持正则表达式的,比如grep。

常用的匹配字符

^

^可以匹配以指定字符开头的行

cat a.txt | grep ^j

可以查询a.txt文本中的以j开头的行
在这里插入图片描述

$

$可以匹配以指定字符结尾的行

cat a.txt | grep oo$

可以查询a.txt文本中的以oo结尾的行在这里插入图片描述

.

.:可以匹配一个任意字符

 cat a.txt | grep h...o

可以查询包含h开头,o结尾的5个字符的字符串的行,h和o之间的3个字符任意
在这里插入图片描述

*

*:不是单独使用的,是前一个字符出现0次或者多次,即h *e表示可以匹配到e,he,hhe

cat a.txt | grep hel*o 

在这里插入图片描述
可以和.结合使用,.*表示任意字符任意长度

[ ]

[]:字符区间,表示匹配某个范围内的字符
常用的方式有

  • [0,9]:匹配0或者9
  • [0-9]:匹配0-9中的一个字符
  • [0-90]*:匹配任意长度的0-9中的字符,即任意数字
  • [a-z]:匹配任意字母字符
\

\:转义符,对于一些特殊的符号,要使用转义符

 cat a.txt | grep '\$' 

需要使用’'单引号
在这里插入图片描述

扩展

一些扩展是不支持的,需要-E参数
刷选手机号:
匹配规则是1开头,0-9数字出现10次的字符
{}里面可以添加数字,但需要加-E参数来支持
需要有$来限制
在这里插入图片描述

文本处理工具

cut

可以从文件中的每一行去进行分割,选择输出想要的内容
参数:

  • -f:选择第几列
  • -d:分割符
  • -c:按字符进行分割
例子

有一个a.txt文本
在这里插入图片描述

使用cut

cat a.txt | cut -d " " -f 2

输出:
在这里插入图片描述

解析
-d " " 表示以空格分割,a.txt中则会被分割成两列
-f 2 表示选择第二列
如果想选择多个列,可以,隔开, -f 2,3,4
如果想选择2列到4列的内容,可以使用 -f 2-4
如果想选择2列之后的全部,可以使用 -f 2-

awk

和cut类似,只是功能更加的强大,默认以空格分开,可以对选择的部分做处理。

参数:

  • -F:分隔符
  • -v:可以引入一个变量
例子

有一个a.txt文本
在这里插入图片描述

使用awk

 cat a.txt | awk  '/^hello/ {print $2","$1}'

输出结果:
在这里插入图片描述
解析:
‘/^hello/ {print $2","$1}’:它是分成两部分的,第一部分是/^hello/,是一个正则表达式,可以帅选想要的内容,可以省略的。第二部分是{print $2",“$1},print是输出,”,"是输出选择的两列内容中间以什么分割。这两部分要写在’ '单引号中,因为awk是默认空格分割的,所以没有指定分割符了,不然可以使用-F指定分割符。

添加字符串

可以在开头和结尾添加字符串,使用BEGIN{print “内容”}和END{print “内容”}

cat a.txt | awk 'BEGIN{print "begin"} /^hello/ {print $2","$1} END{print "end"}'

运行结果:
在这里插入图片描述

可以对列加减

准备一个a.txt,第三列是数字
在这里插入图片描述

 cat a.txt | awk  '{print $3 + 1}'

运行结果:
在这里插入图片描述

使用自定义变量
cat a.txt | awk -v i=1 '{print $3 + i}'

使用-v参数可以引入自定义变量,传递给’'部分

内置变量

awk中默认自带的变量

  • FILENAME:文件名
  • NR:已读行号
  • NF:列数

查询文件中的空行行号:
准备一个a.txt文件
在这里插入图片描述
awk '/^$/ {print NR}' a.txt
运行结果:
在这里插入图片描述


http://www.niftyadmin.cn/n/5558251.html

相关文章

java包装类 及其缓存

Java 包装类(Wrapper Class)是将基本数据类型转换为对象的方式,每个基本数据类型在 java.lang 包中都有一个相应的包装类: Boolean 对应基本类型 boolean Character 对应基本类型 char Integer 对应基本类型 int Float 对应基本…

【HarmonyOS学习】定位相关知识(Locationkit)

简介 LocationKit提供了定位服务、地理围栏、地理编码、逆地理编码和国家码等功能。 可以实现点击获取用户位置信息、持续获取位置信息和区域进出监控等多项功能。 需要注意,需要确定用户已经开启定位信息,一下的代码没有做这一步的操作,默…

Laravel与Redis的共舞:释放高性能缓存的潜力

Laravel与Redis的共舞:释放高性能缓存的潜力 在现代Web应用开发中,性能优化始终是关键议题,而缓存则是提升性能的重要手段之一。Laravel框架集成了对Redis这一高性能键值存储系统的支持,使得数据缓存、会话管理和队列处理变得简单…

安装adb和常用命令

下载ADB安装包 https://dl.google.com/android/repository/platform-tools-latest-windows.zip 解压安装包 解压如上下载的安装包,然后复制adb.exe所在的文件地址 配置环境变量 我的电脑——>右键属性——>高级系统设置——>环境变量——>系统变量—…

搜维尔科技:Varjo XR-4开箱测评,里面都有啥?

Varjo XR-4开箱测评,里面都有啥? 搜维尔科技:Varjo XR-4开箱测评,里面都有啥?

探索Transformer:依存句法分析的新纪元

探索Transformer:依存句法分析的新纪元 依存句法分析是自然语言处理(NLP)领域中的一项基础任务,它旨在揭示句子中词语之间的依存关系。近年来,Transformer模型以其卓越的性能在依存句法分析领域引起了一场革命。本文将…

PhantomJs将html生成img|pdf

PhantomJS PhantomJS是一个可编程的无头浏览器,‌它基于WebKit内核,‌通过JavaScript API进行脚本化操作,它对各种web标准有快速和原生化的支持,包括DOM处理、CSS选择器、JSON、Canvas和SVG。‌无头浏览器指的是一个完整的浏览器内…

<Rust><GUI>rust语言GUI库tauri体验:前、后端结合创建一个窗口并修改其样式

前言 本文是rust语言下的GUI库:tauri来创建一个窗口的简单演示,主要说明一下,使用tauri这个库如何创建GUI以及如何添加部件、如何编写逻辑、如何修改风格等,所以,这也是一个专栏,将包括tauri库的多个方面。…