数组和文本三剑客

数组:

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

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

数组的定义方法:

数组名=(a b c d)

数组名不能重复

#数组的定义方法
[root@localhost opt]# test1=(a b c d)
[root@localhost opt]# echo ${test1[*]}
a b c d
[root@localhost opt]# echo ${test1[@]}
a b c d
[root@localhost opt]# test2[0]=1
[root@localhost opt]# test2[1]=2
[root@localhost opt]# test2[2]=3
[root@localhost opt]# echo ${test2[*]}
1 2 3

数组的长度指的是数组内包含了几个元素。

[root@localhost opt]# echo ${#test1[*]}
4

数组的便利方式

#数组的便利方式
test4=(1 2 3 4 5)
for num in ${test4[*]}
do
echo $num
done

数组的切片

[root@localhost opt]# test5=(1 2 3 4 5 6)
[root@localhost opt]# echo ${test5[*]:1:3}
2 3 4
[root@localhost opt]# echo ${test5[*]:0:2}    #0表示起始位置,2表示步长,起始位置0开始,包括0,移2个。
1 2

数组的替换

临时替换:

[root@localhost opt]# echo ${test5[*]/4/99}
1 2 3 99 5 6
[root@localhost opt]# echo ${test5[*]}
1 2 3 4 5 6

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

[root@localhost opt]# test5[3]=99
[root@localhost opt]# echo ${test5[*]}
1 2 3 99 5 6

删除数组

[root@localhost opt]# echo ${test1[*]}
a b c d
[root@localhost opt]# unset test1
[root@localhost opt]# echo ${test1[*]}
[root@localhost opt]# echo ${test5[*]}
1 2 3 99 5 6
[root@localhost opt]# unset test5[3]
[root@localhost opt]# echo ${test5[*]}
1 2 3 5 6

数组追加,追加元素

指定下标位置进行追加

[root@localhost opt]# test5[3]=4

自动追加

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

练习

#现在定义一个数组,元素都是整数,实现数组内整数的累加求和。
num=0
sum=0
test1=(10 21 30 41 50 61 70 81 90)
for i in ${test1[*]}
do
if (( $i%2 == 0 ))
then
 num=$(($i+$num))
else
 sum=$(($i+$sum))
fi
done
echo "偶数和是:" $num
echo "奇数和是:" $sum
#定义一个数组,使用条件判断找出数组内最大值和最小值
test1=(3 5 7 4 9)
a=${test1[0]}
b=${test1[0]}
for i in ${test1[*]}
do
if [[ $i -gt $b ]]
then
 b=$i
fi
if [[ $i -lt $a ]]
 then
 a=$i
 fi
done
echo $b
echo $a

冒号排序:

test1=(20 10 60 40 50 30)
#从小到大排序
#思路:对比两个相邻的元素,从小到大为例。满足交换条件的元素,小的往左移,大的往右移。
#数组的位置发生变化(下标对应的元素的值发生变化)
#双层循环,外部循环控制排序的轮次。内循环比较两个元素的大小,决定是否互换位置。
#对比和交换的次数随着排序轮次而减少。
echo "原数组的排序为:${test1[*]}"
length=${#test1[*]}
for ((i=1;i<$length;i++))
do
 for ((j=0;j<$length-i;j++))
  do
   a=${test1[$j]}
   c=$(($j+1))
   b=${test1[$c]}
    if [[ $a -gt $b ]]
    then
      d=$a
      test1[$j]=$b
      test1[$c]=$d
​
    fi
  done
done
echo "${test1[*]}"
[root@localhost opt]# sh shuzu3.sh 
原数组的排序为:20 10 60 40 50 30
10 20 30 40 50 60

正则表达式:

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

文本三剑客:

grep 过滤文本内容

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

awk 按行取列

文本三剑客都是按行进行匹配。

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

选项:

-m 匹配几次之后停止

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

-v 取反

-n 显示匹配的行号

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

-c 只统计匹配的行数

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

-o 仅显示匹配的结果

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

-q 静默模式。不输出任何信息

[root@localhost opt]# grep -q root /etc/passwd
[root@localhost opt]# 

-A 数字 后几行

[root@localhost 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

-B 数字 前几行

-C 数字 前后各几行

-e 或者

-E 匹配扩展正则表达式

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

[root@localhost opt]# vim 123.txt
qwe 123 aaa bbb ccc
[root@localhost opt]# vim 456.txt
123 qwe ddd ccc
[root@localhost opt]# grep -f 123.txt 456.txt 
123
qwe
ccc

-r 递归目录 目录下的文件内容。软连接不包含在内

-R 递归目录 目录下的文件内容。包含软连接。

[root@localhost opt]# grep -r qwe /opt
/opt/dec/123.txt:qwe
/opt/123.txt:qwe
/opt/456.txt:qwe
[root@localhost opt]# grep -R qwe /opt
/opt/dec/123.txt:qwe
/opt/123.txt:qwe
/opt/999.txt:qwe
/opt/456.txt:qwe

排序:

sort

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

sort 选项 参数

cat file | sort 选项

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

-b 忽略每行之前的空格

-n 按照数字进行排序

-r 反向排序

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

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

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

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

-u 显示仅出现一次的行(包括不是连续出现的重复行)

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

作业:

按照大小进行排序

for k in `df -h | awk 'NR>1 {print $5}' | tr -d '%'`
do
 test2+=($k)
length=${#test2[*]}
  for ((i=1;i<$length;i++))
  do
    for ((j=0;j<$length-i;j++))
    do
      a=${test2[$j]}
      c=$(($j+1))
      b=${test2[$c]}
      if [[ $a -lt $b ]]
      then
      d=$a
      test2[$j]=$b
      test2[$c]=$d
​
    fi
  done
done
done
echo ${test2[*]}
​
[root@localhost opt]# sh shuzu5.sh 
100 39 18 15 1 1 1 1 0 0 0 0
test2=($(df -h | awk 'NR>1 {print $5}' | tr -d '%'))
length=${#test2[*]}
  for ((i=1;i<$length;i++))
  do
    for ((j=0;j<$length-i;j++))
    do
      a=${test2[$j]}
      c=$(($j+1))
      b=${test2[$c]}
      if [[ $a -lt $b ]]
      then
      d=$a
      test2[$j]=$b
      test2[$c]=$d
​
    fi
  done
done
echo ${test2[*]}
df -h | awk 'NR>1 {print $0}'  | sort -k5 -nr
​
[root@localhost opt]# sh shuzu5.sh 
100 39 18 15 1 1 1 1 0 0 0 0
/dev/sr0                 4.3G  4.3G     0  100% /mnt
/dev/sdb2                 17M  6.5M   11M   39% /data2
/dev/sda1               1014M  179M  836M   18% /boot
/dev/mapper/centos-root   38G  5.5G   32G   15% /
tmpfs                    378M   12K  378M    1% /run/user/42
tmpfs                    1.9G   13M  1.9G    1% /run
/dev/sdb3                5.0G   33M  5.0G    1% /data3
/dev/mapper/centos-home   19G   37M   19G    1% /home
tmpfs                    378M     0  378M    0% /run/user/0
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
tmpfs                    1.9G     0  1.9G    0% /dev/shm
devtmpfs                 1.9G     0  1.9G    0% /dev
​

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

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

相关文章

CarService的构成和初始化分析

以下分析&#xff0c;基于安卓13的AAOS。 代码构成 packages/services/Car CarService相关代码&#xff0c;主要是在这个目录下 frameworks/opt/car/services 主要是carservice启动相关。 其它目录&#xff1a;audio_policy_configuration.xml和car_audio_configuration.xm…

国际期货行情相关术语

1&#xff09;合约&#xff1a;期货行情表提供了期货交易的相关信息 &#xff0c;行情表中每一个期货合约都有合约代码&#xff08;由期货合约交易代码和合约到期月份组成&#xff09;来标识。 &#xff08;2&#xff09;开盘价&#xff1a;当日某一期货合约交易开始前五分钟集…

聊聊分布式集群的基本概念

在当前主流的分布式架构中,各种各样的集群技术几乎成了任何想要提升系统稳定性和处理能力的团队的必备技能。虽然各种中间件和系统都有让人看似眼花缭乱的集群实现方案,但其背后仍然逃不过一些核心的技术概念,我会结合几个我比较熟悉的中间件,简单聊一下我对集群的理解: …

ARM架构简明教程

目录 一、ARM架构 1、RISC指令集 2、ARM架构数据类型的约定 2.1 ARM-v7架构数据类型的约定 2.2 ARM-v8架构数据类型的约定 3、CPU内部寄存器 4、特殊寄存器 4.1 SP寄存器 4.2 LR寄存器 4.3 PC寄存器 二、汇编 1、汇编指令&#xff08;常用&#xff09; 2、C函数的…

nextjs(持续学习中)

return ( <p className{${lusitana.className} text-xl text-gray-800 md:text-3xl md:leading-normal}> Welcome to Acme. This is the example for the{’ } Next.js Learn Course , brought to you by Vercel. ); } 在顶级 /public 文件夹下提供静态资产 **默认 /…

通过视频网站传播的RecordBreaker窃密木马分析

1 攻击活动概览 近期&#xff0c;安天CERT监测到通过视频网站进行传播的攻击活动。攻击者窃取订阅者数量超过10万的视频创作者账号&#xff0c;发布与破解版热门软件相关的演示视频&#xff0c;诱导受害者下载RecordBreaker窃密木马。 RecordBreaker窃密木马是Raccoon…

安装 Fedora CoreOS 操作系统

首发日期 2024-06-16, 以下为原文内容: 有一台吃灰几年的 e5-26v3 古老机器, 最近翻出来用一下. 首先从安装操作系统开始. 目录 1 FCOS 简介2 安装过程 2.1 下载 iso 镜像文件并制作安装 U 盘2.2 编写安装配置文件2.3 编译安装配置文件2.4 从 U 盘启动并安装 3 SSH 连接并测试…

【无标题】小红书618投放高效复盘|种草效果评估

618大促进入尾声&#xff0c;品牌投放是否达到预期目标&#xff1f;如何找准复盘重点&#xff1f;如何衡量种草效果&#xff1f;如何沉淀优质的策略&#xff1f; 基于这些问题&#xff0c;千瓜推出618小红书投放复盘攻略&#xff0c;帮助品牌厘清复盘思路&#xff0c;在大促后快…

万界星空科技QMS质量管理介绍

产品的生产质量是企业发展之根本&#xff0c;对所有企业来说&#xff0c;建立完善质量控制体系&#xff0c;对企业生产经营以及发展竞争具有至关重要的影响&#xff0c;可以说是企业质量保证的防火墙。QMS质量管理系统对任何一家企业都具有重要意义&#xff0c;可帮助企业提高生…

SmartEDA革新电路设计:告别繁琐,轻松步入智能时代!

在数字化浪潮席卷而来的今天&#xff0c;电路设计的复杂性和繁琐性一直是工程师们面临的难题。然而&#xff0c;随着科技的进步&#xff0c;一款名为SmartEDA的电路设计工具应运而生&#xff0c;它以智能化、高效化的特点&#xff0c;彻底颠覆了传统电路设计的方式&#xff0c;…

Ceph入门到精通-对象存储的冷热分离实现方法,该如何配置

实现对象存储的冷热分离的基本方法,包括桶创建、冷热池子创建、生命周期配置以及回收设置的步骤概述: 一、桶创建 使用AWS CLI创建S3存储桶,可以通过指定LocationConstraint参数来创建存储桶,并使用--endpoint-url指向RADOS Gateway的地址。 aws s3api create-bucket --…

08--LVS网站高并发解决方案

前言&#xff1a;LVS&#xff0c;工作稳定&#xff0c;抗负载能力强&#xff0c;属于运维基础&#xff0c;这里将lvs两种模式的部署方式在这里记录一下&#xff0c;并在示例完成后&#xff0c;补充一下基础概念。本章不可避免的涉及到一些网络方面知识&#xff0c;会形象简单的…

不“卷”低价,品牌如何让客户愿意“留下”?

天猫取消预售制度&#xff0c;满减力度大于往年&#xff0c;京东直接将“又便宜又好”定为大促主题。今年的618&#xff0c;离不开两大关键词&#xff1a;拼低价 和 回归用户。 价格“内卷”&#xff0c;消费者可以花更少的钱买到商品&#xff0c;但对商家来说&#xff0c;意味…

打开朦胧的云雾仓,享受悦耳好音乐,CIYINSO Mars2体验

如今蓝牙耳机的选择越来越丰富&#xff0c;音质好、续航久的产品也越来越多&#xff0c;百元左右的亲民价位就有不少选择。在这样的大背景下&#xff0c;耳机的设计自然就成了很多朋友选择的重要参考&#xff0c;不从众&#xff0c;有特点的耳机造型&#xff0c;往往更能获得大…

聊一聊生成式AI

生成式AI&#xff08;Generative AI&#xff09;是指一类能够自主创造新内容的人工智能技术&#xff0c;这些内容可以是文本、图像、音频、视频等。与传统的分析性或分类性AI系统不同&#xff0c;生成式模型的主要任务不是对现有数据进行分类或预测&#xff0c;而是生成全新的、…

web爬虫笔记:js逆向案例九(某多多 anti_content参数)补环境流程

web爬虫笔记:js逆向案例九(某多多 anti_content参数)补环境流程 一、目标网站:aHR0cHM6Ly9tb2JpbGUueWFuZ2tlZHVvLmNvbS8= 二、接口分析 1、快速定位加密位置(通过搜索/cells/hub/v3快速定位到加密js文件) 2、通过分析可知&#

@pytest.fixture与@pytest.mark.parametrize结合实现参数化

背景&#xff1a;测试数据既要在fixture方法中使用&#xff0c;同时也在测试用例中使用 使用方法&#xff1a;在使用parametrize的时候添加"indirectTrue"参数。pytest可以实现将参数传到fixture方法中&#xff0c;也可以在当前测试用例中使用。 原理&#xff1a;参…

众筹首发 | 当当狸智能天文望远镜TW2,大屏实时观景 长焦定格远方!

满天的繁星和远方景色&#xff0c;让人无比向往&#xff0c;你是否也曾渴望探索星空的奥秘&#xff0c;沉醉在无垠的美景之中&#xff1f; 然而&#xff0c;当我们用望远镜远眺星空时&#xff0c;固定姿势的观测经常让人感到疲惫&#xff0c;而普通相机亦是难以触及更远的距离…

Flash基础知识

1、Flash发展历程 存储器通常分为两类型&#xff0c;即随机存取的RAM&#xff08;内存&#xff09;与只读的ROM&#xff08;外存&#xff09;。 RAM&#xff0c;也称随机存取存储器&#xff0c;数据可以被读取和修改。它主要用于存储正在运行的程序和临时数据&#xff0c;是计…

OpenMMlab AI实战营第五、六期培训

OpenMMlab AI实战营第五、六期培训 OpenMMlab实战营第五、六次课2023.2.7-9学习参考第五次课笔记第六次课笔记一、什么是语义分割二、语义分割 v.s. 实例分割 v.s. 全景分割三、语义分割经典模型1.语义分割的基本思路2.**复用卷积计算**3.全连接层的卷积化4.预测图的升采样5.双…