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

##简介
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
运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/802799.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio引入ndk编译的so库, 通过jni给Java程序使用

前言 工作要求将一个C老项目的函数用ndk打包成库给安卓同事的java程序调用。 这个任务我debuff拉满: 自己之前从来没接触过安卓开发,问了老板为什么不让安卓开发来干,老板说安卓开发不懂c,公司就我一个是懂c的。。。项目开发年…

自定义短语 - 那些年狠狠惊艳了我们的输入法使用技巧

你是不是每次注册或者登录的时候还在吭哧吭哧地输入你的电话号、邮箱或者昵称? 你是不是在填写各种信息的时候还在一次又一次地输入自己的身份证号、银行卡号或者车牌号? 而我只要输入“mail”,我的候选框里就有6个email号待我挑选&#xf…

css实现前端水印

单处水印 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Watermark Example</title>&l…

单片机设计_自行车码表(AT89C51, LCD1602, DS1302,霍尔传感器)

想要更多项目私wo!!! 一、电路设计 系统采用51单片机LCD1602液晶DS1302时钟模块霍尔传感器电机按键模块蜂鸣器报警模块设计而成。 产品自带单片机上电复位电路、手动复位电路&#xff08;复位按键&#xff09;、晶振电路&#xff08;给单片机提供时钟周期&#xff09;。 …

Java面试题--JVM大厂篇之深入解析JVM中的Serial GC:工作原理与代际区别

目录 引言&#xff1a; 正文&#xff1a; 一、Serial GC工作原理 年轻代垃圾回收&#xff08;Minor GC&#xff09;&#xff1a; 老年代垃圾回收&#xff08;Major GC或Full GC&#xff09;&#xff1a; 二、年轻代和老年代的区别 年轻代&#xff08;Young Generation&a…

数据库基础-进阶

数据库管理&#xff1a; *sql语句 数据库用来增删改查的语句 *** 备份 数据库的数据进行备份 * 主从复制&#xff0c;读写分离&#xff0c;高可用 原理 数据库的概念和相关的语法和规范&#xff1a; 数据库&#xff1a;组织&#xff0c;存储&#xff0c;管理数据的仓库。 数据…

Python用Pyqt5制作音乐播放器

具体效果如下 需要实现的功能主要的几个有&#xff1a; 1、搜索结果更新至当前音乐的列表&#xff0c;这样播放下一首是搜素结果的下一首 2、自动播放 3、滚动音乐文本 4、音乐进度条 5、根据实际情况生成音乐列表。我这里的是下面的情况&#xff0c;音乐文件的格式是 歌…

Calibration相机内参数标定

1.环境依赖 本算法采用张正友相机标定法进行实现&#xff0c;内部对其进行了封装。 环境依赖为 ubuntu20.04 opencv4.2.0 yaml-cpp yaml-cpp安装方式&#xff1a; &#xff08;1&#xff09;git clone https://github.com/jbeder/yaml-cpp.git #将yaml-cpp下载至本地 &a…

Fastjson解析JSON时key对应的value存在多个英文双引号解决

情景 如上图所示&#xff0c;经常在解析json时会出现因双引号报错的问题。 fastjson解决方案 JSONObject jsonfile JSONObject.parseObject(json, Feature.OrderedField);JSONArray jsonArray jsonfile.getJSONObject("result").getJSONArray("items");…

Linux网络编程-socket套接字使用详解

1.概念 在Linux中&#xff0c;套接字&#xff08;socket&#xff09;是一种通信机制&#xff0c;用于实现不同进程之间或同一主机上的不同线程之间的数据交换。它是网络编程的基础&#xff0c;允许应用程序通过网络进行通信&#xff0c;也可以在同一台机器上的不同进程间进行通…

ajax实时监控input搜索框并给提示词的事实举例的超全版本(上-不用字典树)

前言 感觉前面直接放概念和字典树还是差了点&#xff0c;有的看了概念还是没有思路的&#xff0c;于是写这篇文章来举例子&#xff0c;首先这不不包含字典树的版本&#xff0c;用字典树的版本等下会发。 需要的技术 jsp和ajax简单的理解&#xff0c;做示例的后端框架是sprin…

物流智能锁在物流锁控中的应用设计方案

一、案例介绍与问题剖析 &#xff08;一&#xff09;案例概述 某知名物流企业&#xff0c;拥有广泛的运输网络和多样化的客户群体&#xff0c;涵盖了制造业、零售业等多个领域。然而&#xff0c;随着业务规模的不断扩大&#xff0c;其在货物锁控方面遇到了一系列棘手的问题。…

Java | Leetcode Java题解之第238题除自身以外数组的乘积

题目&#xff1a; 题解&#xff1a; class Solution {public int[] productExceptSelf(int[] nums) {int length nums.length;// L 和 R 分别表示左右两侧的乘积列表int[] L new int[length];int[] R new int[length];int[] answer new int[length];// L[i] 为索引 i 左侧…

[C++] 深度剖析C_C++内存管理机制

文章目录 内存分布内存分布图解 C语言中动态内存管理方式malloc:callocrealloc C内存管理方式内置类型**自定义类型** operator new & operator deleteoperator new & operator delete函数operator newoperator delete **new T[N]** 与**delete[]** **定位new表达式(pl…

JavaScript基础(十四)

函数 很多人一看到这两个字就头大&#xff0c;可能由于多年被数学摧残有不小阴影&#xff0c;放心&#xff0c;我们这里的函数不是那些东西&#xff0c;在编程中我们的函数指的是: 程序的基本单元&#xff0c;是完成特定任务的代码语句块。 我们在写程序时&#xff0c;可能会…

【保姆级】Python项目部署到Linux生产环境(uwsgi+python+flask+nginx服务器)

1.安装python 我这里是3.9.5版本 安装依赖&#xff1a; yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y 根据自己的需要下载对应的python版本&#xff1a; cd /usr/local wget https://www.python.or…

springboot机场投诉管理平台-计算机毕业设计源码22030

摘要 随着航空运输业的迅速发展&#xff0c;机场的客流量不断增加&#xff0c;旅客对机场服务的质量和效率也提出了更高的要求。为了提高机场的服务质量&#xff0c;及时处理旅客的投诉&#xff0c;建立一个高效、便捷的机场投诉管理平台显得尤为重要。 本项目旨在设计与实现一…

# ffmpeg 工具使用

文章目录 ffmpeg 工具使用1.图片转换2.图片转视频3.截取片段4. 视频格式转换5. 视频转图片方法一&#xff1a;方法二&#xff1a;生成更清晰无压缩的图片方式&#xff1a; ffmpeg 工具使用 windows安装教程&#xff1a;https://blog.csdn.net/csdn_yudong/article/details/129…

Python一对一辅导答疑|Rust 德国

你好&#xff0c;我是悦创。 下面是答疑内容。 在 Rust 中&#xff0c;方法的调用方式通常取决于它们是如何定义的。在你的例子中&#xff0c;print_drink方法最初是作为一个接受Drink类型实例作为参数的关联函数&#xff08;类似于静态方法&#xff09;定义的。后来&#xff…

紫外测熔融实验结果温度和abs作折线图和求一阶导最大值

import numpy as np import pandas as pd from pyecharts.charts import Line from pyecharts import options as opts from matplotlib import pyplot as plt import xlrd # 读取 csv 文件 data pd.read_excel(F:/LJX/lc8.xls)# 假设 csv 文件中有两列数据&#xff1a;x 和 y…