数组、正则表达式、排序

数组

定义:在集合当中指定多个元素,元素的类型可以是整数也可以是字符串,也可以是浮点。

作用:可以一次性定义多个元素,可以为变量赋值提供便利。

数组的定义方法:

数组名= (a b c) 数组名不能重复
方法1
[root@test2 opt]# test1=(a b c d)
[root@test2 opt]# echo ${test1[*]}
a b c d
​
方法2
[root@test2 opt]# test2[0]=1          素组内部元素值从零开始
[root@test2 opt]# test2[1]=2
[root@test2 opt]# test2[2]=3
[root@test2 opt]# echo ${test2[@]}
1 2 3

数组内部的元素值从零开始

数组的长度指的是数组内部包含了几个元素。
数组内部一共有几个元素
[root@test2 opt]# echo ${#test2[*]}
3
指定查看第几位元素【位置数-1】
[root@test2 opt]# test3=(aaa bbb 123 456)
[root@test2 opt]# echo ${test3[0]}
aaa
[root@test2 opt]# echo ${test3[3]}
456

数组的遍历

模块
[root@test2 opt]# vim test1.sh
​
test1=(1 2 3 4 5)
for sum in ${test1[*]}
do
echo $sum
done
结果
[root@test2 opt]# sh test1.sh 
1
2
3
4
5
数组的切片
[root@test2 opt]# test5=(1 2 3 4 5)
[root@test2 opt]# echo ${test5[*]}
1 2 3 4 5
[root@test2 opt]# echo ${test5[*]:0:2}
1 2       起始位置0开始,包括0,移两位
​
:0  表示起始位置
:2  表示步长
数组替换
临时替换
[root@test2 opt]# echo ${test5[*]}
1 2 3 4 5
[root@test2 opt]# echo ${test5[*]/4/99}
1 2 3 99 5
​
永久替换
[root@test2 opt]# echo ${test5[*]}
1 2 3 4 5
[root@test2 opt]# test5[3]=99
[root@test2 opt]# echo ${test5[*]}
1 2 3 99 5

永久修改可以通过修改元素下标的值实现

删除数组
删除整个数组
[root@test2 opt]# unset test1
[root@test2 opt]# echo ${test1[*]}
​
删除数组指定元素
[root@test2 opt]# echo ${test5[*]}
1 2 3 4 5
[root@test2 opt]# unset test5[3]
[root@test2 opt]# echo ${test5[*]}
1 2 3 5

把元素当中的值删掉后其他元素的位置不变

在数组中元素追加
[root@test2 opt]# test5[3]=4
[root@test2 opt]# echo ${test5[3]}
4

自动追加

[root@test2 opt]# test5=(1 2 3 4)
[root@test2 opt]# echo ${test5[*]}
1 2 3 4
[root@test2 opt]# test5+=(5 6)
[root@test2 opt]# echo ${test5[*]}
1 2 3 4 5 6

例题

[root@test2 opt]# vim test1.sh 
#定义一个数组,元素都是整数,实现数组内的整数累加求求和。
sum=0
test1=(10 20 30 40)
for i in ${test1[*]}
dosum=$(($i+$sum))
done
echo $sum
​
[root@test2 opt]# sh test1.sh 
100
#定义一个数组,元素都是整数,实现数组内的整数累加求求和。
#奇数和奇数相加,偶数和偶数相加
sum=0
sum1=0
test1=(10 21 30 41)
for i in ${test1[*]}
do
if [[ $i%2 -eq 0 ]]
thensum=$(($i+$sum))
elsesum1=$(($i+$sum))
fi
done
echo "偶数和" $sum
echo "奇数和" $sum1
结果
[root@test2 opt]# sh test1.sh 
偶数和 40
奇数和 62
[root@test2 opt]# vim test1.sh 
#定义一个数组,使用判断条件找出最大值和最小值并打印
#定义一个数组,使用判断条件找出最大值和最小值并打印
test1=(3 5 7 9 1 45 20)
max=${test1[0]}
min=${test1[0]}
for i in ${test1[*]}
do
if [[ $i -gt $max ]]
then
max=$i
fi
if [[ $i -lt $min ]]
then
min=$i
fi
done
echo "最大值" $max
echo "最小值" $min
结果
[root@test2 opt]# sh test1.sh 
最大值 45
最小值 1

[root@test2 opt]# vim test1.sh
test1=($(df -h | awk 'NR>1 {print $5}' | tr -d '%'))
a=${#test1[*]}
for ((i=1; i<$a; i++))
do
    for ((b=0; b<$a-i; b++))
     do
      a1=${test1[$b]}
      c=$(($b+1))
      b1=${test1[$c]}
     if [ $a1 -lt $b1 ]
      then
        temp=$a1
        test1[$b]=$b1
        test1[$c]=$temp
      fi
    done
done
echo "修改结果" ${test1[*]}
#拓展
df -h | awk 'NR>1 {print $0 $5}' | tr -d '%' | sort -nr -k5
结果
[root@test2 opt]# sh test1.sh 
修改结果 100 18 14 1 1 1 1 0 0 0
/dev/sr0                 4.3G  4.3G     0  100 /run/media/root/CentOS 7 x86_64100
/dev/sda1               1014M  179M  836M   18 /boot18
/dev/mapper/centos-root   36G  4.8G   31G   14 /14
tmpfs                    781M  4.0K  781M    1 /run/user/421
tmpfs                    781M   36K  781M    1 /run/user/01
tmpfs                    3.9G   13M  3.8G    1 /run1
/dev/mapper/centos-home   18G   33M   18G    1 /home1
tmpfs                    3.9G     0  3.9G    0 /sys/fs/cgroup0
tmpfs                    3.9G     0  3.9G    0 /dev/shm0
devtmpfs                 3.8G     0  3.8G    0 /dev0

面试题

冒号排序

类似于气泡商用的工作,会将数组当中的元素从小到大或者从大到校的顺序进行一个重新排列

[root@test2 opt]# vim test2.sh 
#类似于气泡商用的工作,会将数组当中的元素从小到大或者从大到校的顺序进行一个重新排列
test2=(20 30 40 60 10 100)
#从小到达排序
#思路:对比两个相邻的元素,从小到大为列。满足条件的元素小的往左大的往右
#数组的位置发生变化(下标对应的元素值发生变化)
length=${#test2[*]}
for ((a=1; a<$length; a++))
dofor ((b=0; b<$length-a; b++))do
first=${test2[$b]} 0=10
j=$(($b+1))
second=${test2[$j]} 1=5
if [ $first -gt $second ] 10 > 5
then
temp=$first
test1[$b]=$second
test1[$j]=$temp
fi
done
done
echo "排序" ${test2[*]}
​

正则表达式

正则表达式匹配的是文本内容,linux的文本三剑客,都是针对文本内容

grep 过滤文本内容

sed 针对文本内容进行增删改查

awk 按行取列

文本三剑客

都是按行进行匹配

grep

grep的作用就是使用正则表达式来匹配文本的内容

grep -m 数字 匹配几次之后停止

[root@test2 opt]# grep -m 1 root /etc/passwd
root:x:0:0:root:/root:/bin/bash

grep -v 取反

grep -n 显示匹配的行号

[root@test2 opt]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

grep -c 只统计匹配行数

[root@test2 opt]# grep -c root /etc/passwd
2

grep -o 仅显示匹配的结果

[root@test2 opt]# grep -o root /etc/passwd
root
root
root
root

grep -q 不输出任何信息 没有任何结果

grep -A after 数字 匹配到当前行包括后几行

[root@test2 opt]# grep -A 3 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
​

grep -B 数字 之间的行

grep -C 数字 前后各几行

[root@test2 opt]# grep -C 3 wbl /etc/passwd
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
wbl:x:1000:1000:wbl:/home/wbl:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
nginx:x:987:981:Nginx web server:/var/lib/nginx:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin

grep -e 过滤

grep -E 匹配扩展正则表达式

grep -f 可以匹配两个文件相同的内容,以第一个文件为准

[root@testl opt]# vim 123.txt
[root@testl opt]## vim 456.txt
[root@testl opt]# cat 123.txt
123456
aaa
CCC
VVV
[root@testl opt]# cat 456.txt
123
456
VVV
uuu
[root@testl opt]# grep -f 123.txt 456.txt
123
456
VVV

grep -r 递归目录 目录下的文件内容

[root@test2 opt]# grep -r 123 /opt/
/opt/test1.txt:123
/opt/test2.txt:123

grep -R 递归目录 目录下的文本内容,包括软连接

排序

sort

以行为单位,对文件内容进行排序

sort 选项 参数

cat file | sort 选项

-f 忽略大小写 默认把大写字母排在前面

-b 忽略每行之前的空格

[root@test2 opt]# sort -b test1.txt
123456
aaa
CCCC
ddd

-n 按照数字进行排序

-r 反向排序

-u 相同的数据只显示一行

[root@test2 opt]# sort -u test1.txt
​
123
456456
aaa
CCCC
ddd

-o 把排序后的结果转存到指定的文件

uniq

uniq 去除连续重复的行,只显示一行

-c 统计连续出现行数的次数,合并连续重复的行

-u 显示仅出现一次的行,同时包括不是连续出现的重复行

-d 仅显示连续出现的行(不包括非连续出现的行)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探索 Nuxt3 Composables:掌握目录架构与内置API的高效应用

title: 深入探索 Nuxt3 Composables&#xff1a;掌握目录架构与内置API的高效应用 date: 2024/6/23 updated: 2024/6/23 author: cmdragon excerpt: 摘要&#xff1a;“本文深入探讨了Nuxt3 Composables&#xff0c;重点介绍了其目录架构和内置API的高效应用。通过学习本文&…

pcl::PointXYZRGBA造成点云无法显示

如果pcd文件没有rgba信息&#xff0c;使用pcl::PointXYZRGBA类型打开会提示以下信息&#xff1a; Failed to find match for field rgba另外&#xff0c;显示出来的点云是黑色&#xff0c;如果使用默认背景色为黑色&#xff0c;就无法显示点云了。 如果设置其它背景色&#xf…

服务器防御ddos攻击

硬件层面&#xff1a; 1、高性能防火墙能有效过滤ddos攻击&#xff0c;可以有效的提高网络的抗攻击能力 2、使用流量清洗设备&#xff08;或者ddos防护设备&#xff09;可以过滤攻击流量&#xff0c;可以保护网站和服务器正常运行 软件层面&#xff1a; 1、 隐藏服务器真实IP 2…

命名冲突常见的领域

命名冲突确实是指在不同的来源或上下文中&#xff0c;同一实体&#xff08;可以是对象、变量、函数、类、文件等&#xff09;具有不同的名称。 在编程中&#xff0c;命名冲突可能发生在以下情况&#xff1a; 变量和函数重名&#xff1a;在不同的作用域或模块中&#xff0c;变量…

视频监控平台:支持交通部行业标准JT/T905协议(即:出租汽车服务管理信息系统)的源代码的函数和功能介绍及分享

目录 一、视频监控平台介绍 &#xff08;一&#xff09;概述 &#xff08;二&#xff09;视频接入能力介绍 &#xff08;三&#xff09;功能介绍 二、JT/T905协议介绍 &#xff08;一&#xff09;概述 &#xff08;二&#xff09;主要内容 1、设备要求 2、业务功能要求…

[最全]设计模式实战(一)UML六大原则

UML类图 UML类图是学习设计模式的基础,学习设计模式,主要关注六种关系。即:继承、实现、组合、聚合、依赖和关联。 UML类图基本用法 继承关系用空心三角形+实线来表示。实现接口用空心三角形+虚线来表示。eg:大雁是最能飞的,它实现了飞翔接口。 关联关系用实线箭头来表示…

OOM日志分析

目录 1. 日志分析2. MAT 工具2.1 日志打印方式2.1.1 HeapDumpOnOutOfMemoryError&#xff08;推荐&#xff09;2.1.2 jmp 命令 2.2 MAT分析方式2.2.1 饼图分析2.2.2 树形图分析2.2.2 泄漏疑点 3. 优化 首先说一下结论&#xff1a;通过MAT工具分析才是最精准的&#xff0c;直接通…

2025秋招NLP算法面试真题(二)-史上最全Transformer面试题:灵魂20问帮你彻底搞定Transformer

简单介绍 之前的20个问题的文章在这里&#xff1a; https://zhuanlan.zhihu.com/p/148656446 其实这20个问题不是让大家背答案&#xff0c;而是为了帮助大家梳理 transformer的相关知识点&#xff0c;所以你注意看会发现我的问题也是有某种顺序的。 本文涉及到的代码可以在…

微信小程序建议录音机

在小程序中实现录音机功能&#xff0c;可以通过使用小程序提供的wx.getRecorderManager() API来获取录音管理对象&#xff0c;然后使用这个对象的start()方法来开始录音&#xff0c;使用stop()方法来停止录音&#xff0c;并使用onStop()方法来监听录音的结束。以下是一个简单的…

Spring响应式编程之Reactor核心接口

响应式流的核心接口 核心接口包括&#xff1a;Publisher<T>、Subscriber<T>、Subscription 和 Processo<T,R> &#xff08;1&#xff09;Publisher<T> Publisher接口代表数据流的生产者&#xff0c;根据收到的请求向Subscriber发布数据。接口定义如…

C语言中的字符输入/输出和验证输入

在C语言中&#xff0c;字符输入/输出功能允许程序与用户进行交互&#xff0c;读取用户的输入信息并展示输出结果。同时&#xff0c;验证输入的作用在于确保用户输入的数据符合预期&#xff0c;以提高程序的稳定性和可靠性&#xff0c;防止无效输入引发的错误或异常行为&#xf…

JavaWeb——MySQL:DDL操作库

目录 1.DDL&#xff1a;查询数据库&#xff1b; 1.1 查询数据库 1.2 创建数据库 1.DDL&#xff1a;查询数据库&#xff1b; 具体操作&#xff1a;增 删 查 用 &#xff1b; 1.1 查询数据库 SQL语句&#xff1a;show databases; 由于我创建过一些数据库&#xff0c;我查询的…

[Spring Boot]Netty-UDP客户端

文章目录 简述Netty-UDP集成pom引入ClientHandler调用 消息发送与接收在线UDP服务系统调用 简述 最近在一些场景中需要使用UDP客户端进行&#xff0c;所以开始集成新的东西。本文集成了一个基于netty的SpringBoot的简单的应用场景。 Netty-UDP集成 pom引入 <!-- netty --…

计算机专业:昔日万金油,明日科技潮头的弄潮儿

高考后的十字路口&#xff1a;计算机专业&#xff0c;依旧闪耀吗&#xff1f; 随着2024年高考的尘埃落定&#xff0c;数百万青春洋溢的脸庞再次凝视着未来的迷雾&#xff0c;试图在繁星点点的专业宇宙中找到那颗最亮的星——计算机科学与技术。长久以来&#xff0c;计算机专业…

【408考点之数据结构】特殊矩阵压缩存储的代码实现

特殊矩阵压缩存储的代码实现 为了更好地理解特殊矩阵的压缩存储&#xff0c;下面提供一些C语言的代码示例&#xff0c;展示如何实现这些矩阵的压缩存储和操作。 1. 稀疏矩阵的三元组表示 #include <stdio.h>#define MAX_TERMS 100typedef struct {int row;int col;int…

Java 比较器

Java 比较器 文章目录 Java 比较器自然排序java.lang.Comparable对象排序java.util.Comparator两种方式的对比 基本数据类型&#xff0c;可以直接使用比较运算符进行比较&#xff0c;但引用数据类型不能直接通过运算符进行比较运算。 实现对象的排序&#xff0c;可以考虑两种方…

【目标检测】DAB-DETR

一、引言 论文&#xff1a; DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR 作者&#xff1a; IDEA 代码&#xff1a; DAB-DETR 注意&#xff1a; 该算法是对DETR的改进&#xff0c;在学习该算法前&#xff0c;建议掌握多头注意力、Sinusoidal位置编码、DETR等相…

Android jetpack Room的简单使用

文章目录 项目添加ksp插件添加 room 引用开始使用room1. 创建bean2. 创建 dao类3. 创建database类 数据库升级复制数据库到指定路径参考文献 项目添加ksp插件 注意&#xff0c;因为ksp插件 是跟项目中使用的kotlin的版本要保持一致的&#xff0c;否则会报错的 首先我们去 https…

【06】数据模型和工作量证明-工作量证明

1. 工作量证明的背景 比特币是通过工作量证明来竞争记账权,并获得比特币奖励。简单来讲就是谁能够根据区块数据更快的计算得到满足条件的哈希值,谁就可以胜出,这个块才会被添加到区块链中。我们把这个过程称为挖矿。比特币每10分钟产生1个区块。 2. 工作量证明算法 1. 获…

追梦与立足:专业与学校的双重选择

在人生的关键节点上&#xff0c;选择总是如影随形。对于即将步入大学的学生而言&#xff0c;选择一个合适的专业和学校&#xff0c;无疑是人生道路上的一大抉择。特别是在分数限制下&#xff0c;如何在追梦与立足之间找到平衡点&#xff0c;做出明智的双重选择&#xff0c;成为…