当前位置: 首页 > news >正文

BASH shell脚本篇3——字符串处理

这篇文章介绍下BASH shell中的字符串处理的相关命令。之前有介绍过shell的其它命令,请参考:

BASH shell脚本篇1——基本命令

BASH shell脚本篇2——条件命令

Bash字符串也是一种数据类型,它用于表示文本而不是数字,它是一组可能还包含数字的字符的组合。如果数字想要表示为字符串,那么需要程序员用引号将数字包起来,以便Bash将数据视为字符串。BASH对字符串的操作有很多方式,以下记录了其中一些常用的用法。

1.字符串基本操作

字符串比较的命令有:

# 等于运算符:用于检查两个字符串是否相等
语法:Operand1 = Operand2
# 不等于运算符:用于检查两个字符串不相等
语法:Operand1 != Operand2
# 小于运算符:是一个条件运算符,用于检查string1是否小于string2
语法:Operand1 \< Operand2
# 大于运算符:用于检查string1是否大于string2
语法:Operand1 \> Operand2
# 检查字符串长度是否大于零
语法:[ -n Operand ]
# 检查字符串长度是否等于零
语法:[ -z Operand ]

2. 字符串长度计算

字符串中的字符总数表示字符串的长度。我们有时需要判断字符串的长度才能执行特定任务。在Bash脚本中,可以使用以下几种方法来获取字符串的长度。

# 方法1
${#str}  
# 方法2
expr length "$str"  
# 方法3
expr "$str" :'.*'  
# 方法4
$str | wc -c  
# 方法5
$str | awk '{print length}'
# 注意:请注意在$str周围使用双引号。如果字符串中包含空格,则双引号非常重
#       要。否则,可以忽略它。

例子如下

# The script is:
str="str len"
echo "Method1:" ${#str}
length=`expr length "$str"`
echo "Method2:" $length
length=`expr "$str" : '.*'`
echo "Method3:" $length
length=`echo -n $str | wc -c`
echo "Method4:" $length
length=`echo -n $str | awk '{print length}'`
echo "Method5:" $length# The result is:
Method1: 7
Method2: 7
Method3: 7
Method4: 7
Method5: 7

3. 拆分字符串

有时候需要根据分隔符来拆分字符串数据,bash没有直接的拆解字符串内置函数,但可以使用定界符在bash脚本中拆分字符串数据。分隔符可以是单个字符,也可以是包含多个字符的字符串。

我们可以使用$IFS变量来拆分,$IFS是一个特殊的内部变量,用于将字符串拆分为单词。$IFS变量称为“内部字段分隔符”,它确定Bash如何识别边界。$IFS用于分配分隔字符串的特定定界符[IFS ='']。空格是$IFS的默认值。但是,也可以使用\t\n-等值作为分隔符。分配定界符后,可以通过两个选项读取字符串:-r-a。即,read -ra ARR <<< "$str"。在这里,选项-r用于定义反斜杠(\),它是字符而不是转义字符。-a选项用于定义将单词(用$IFS分隔)分配给从零开始的数组顺序索引。然后,应用bash for循环来访问列表,这些列表被拆分为一个数组。

例子如下:

# The script is:
str="gabc,23ab,45,abc789abcend, jj kk"
IFS="," #setting "," as delimiter
read -ra array <<<"$str" #reading str as an array as tokens separated by IFS
declare -p array # print array content# The result is:
declare -a array='([0]="gabc" [1]="23ab" [2]="45" [3]="abc789abcend" [4]=" jj kk")'

拆分字符串还有其它方式,这只是其中一种。

4. 提取子字符串

子字符串是字符串中的字符序列,Bash提供了一个从字符串提取信息的选项,可以使用多种方法提取数字或给定的字符串。字符串提取的语法为:

${variable:offset:length}
# 其中:
# - variable是包含字符串的变量名称
# - offset用于指定从何处开始提取字符串的位置,也可以是负的,反向提取
# - length用于指定从偏移量开始执行的字符范围
# 分配长度是可选的。如果未提供length,则子字符串的结尾将是字符串的结尾

例子如下:

# The script is:
str="welcome to the world"
echo ${str:0:10}
echo ${str:(-9)}# The result is:
welcome to
the world

5. 连接字符串

将两个或多个字符串添加或连接在一起,这称为字符串连接。bash中字符串连接的格式为:

# 方法1:
str3="$str1$str2"
# 此命令将串联str1和str2变量的值,并将其存储在第三个变量str3中# 方法2:
newstr="${str} newstr"
# 此命令将字符串变量的值与其它字符串拼接在一起

相关文章:

BASH shell脚本篇3——字符串处理

这篇文章介绍下BASH shell中的字符串处理的相关命令。之前有介绍过shell的其它命令&#xff0c;请参考&#xff1a; BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 Bash字符串也是一种数据类型&#xff0c;它用于表示文本而不是数字&#xff0c;它是一组可能…...

【SSL】用Certbot生成免费HTTPS证书

1. 实验背景 服务器&#xff1a;CentOS7.x 示例域名&#xff1a; www.example.com 域名对应的web站点目录&#xff1a; /usr/local/openresty/nginx/html 2. 安装docker # yum -y install yum-utils# yum-config-manager --add-repo https://download.docker.com/linux/ce…...

报错:java.sql.SQLSyntaxErrorException: Table ‘examsys.Teacher’ doesn’t exist

Linux大小写区分&#xff0c;导致部署项目时MySQL出现错误 问题原因&#xff1a;找不到Teacher这张表。因为在windows下的mysql表名不区分大小写&#xff0c;所以在windows下运行项目没问题。在linux中&#xff0c;mysql会区分大小写&#xff0c;所以sql语句表名用大写的就会找…...

.NET的PLC帮助类

TCP和UDP协议&#xff1a; TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;是TCP/IP协议簇中的两种核心协议。它们在传输层上提供数据传输服务&#xff0c;但具有不同的特性和功能。 TCP协议是一种提供可靠、面向连接的字节流服务的传输协…...

Linux中nfs:failed: Operation not supported

先给出思路&#xff1a; 一个简单粗暴的方式&#xff1a;卸载重装排除未知问题&#xff0c;步骤如下&#xff1a; 一、在 Linux 上卸载 NFS 服务器&#xff0c;步骤&#xff1a; 停止 NFS 服务&#xff1a; sudo service nfs-kernel-server stop如果您使用的是不同的发行版&am…...

ElasticSearch映射与模板介绍

一、前言 前面有相关系列文章介绍了ES的基本概念和各种版本SDK的使用&#xff0c;ES现在已升级到8.5版本&#xff0c;有些概念和SDK用法都有很大变化&#xff0c;后续ES相关的文章会以8.3版本为基准介绍一些实际中应用需要掌握的概念以及一些比较实际的例子。 二、映射 ES环…...

通过 Azure 日志分析加强云安全

Microsoft Azure 云服务在安全日志存储、访问、可伸缩性、降低成本和易于部署方面提供了巨大的优势&#xff0c;因此在企业中很受欢迎。 Microsoft Azure 日志记录工具&#xff08;如 Log360&#xff09;可帮助管理 Azure 云基础结构中所有设备和应用程序&#xff08;如虚拟机…...

[H5动画制作系列 ]变量,帧频,监听器等的生命周期基础测试

模式:按照上述抓图,actions层&#xff0c;1帧,写初始化代码,10帧写返回代码到2帧代码,2-10帧之间一直循环。1帧及10帧代码如下&#xff1a; 如果程序在1-10之间循环,会反复创建变量i,多个监听器等。所以,第一帧最好执行一次即可&#xff0c;程序在2-10帧之间一直循环。...

基于SpringBoot的服装生产管理系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 登录界面的实现 系统主界面的实现 用户管理模块的实现 人事安排管理模块的实现 工资管理模块的实现 考勤管理模块的实现 样板管理模块的实现 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 本协力服装厂服装生…...

动态内存操作(2)

接上一篇文章http://t.csdn.cn/1ONDq&#xff0c;这次我们继续讲解关于动态内存的相关知识。 一、常见的动态内存错误 1.对NULL指针进行解引用操作 #include<stdio.h> #include<stdlib.h> #include<limits.h> int main() {int* p (int*)malloc(INT_MAX/4);…...

Windows-Delphi 窗口置顶

露从今夜白&#xff0c;月是故乡明。 1.Delphi将窗口置顶 if topHwnd <> 0 thenbeginSetWindowPos(topHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);tmr1.Enabled : True;end; 其中topHwnd是目标窗口的句柄。 2.窗口取消置顶 if topHwnd <> 0 th…...

CVE-2020-11978 Apache Airflow 命令注入漏洞分析与利用

简介 漏洞软件&#xff1a;Apache Airflow影响版本&#xff1a;< 1.10.10 环境 Vulhub 漏洞测试靶场 复现步骤 进入 /root/vulhub/airflow/CVE-2020-11978/ 目录运行以下命令启动环境 # 初始化数据库 docker compose run airflow-init # 开启服务 docker compose up -…...

面试经典算法1:DFS

一、前言 1、题目描述和代码仅供参考&#xff0c;如果有问题欢迎指出 2、解题代码采用acm模式&#xff08;自己处理输入输出&#xff09;&#xff0c;不采用核心代码模式&#xff08;只编程核心函数&#xff09; 3、解题代码采用C语言&#xff08;ai一键翻译任意语言&#xff…...

Windows系统利用cpolar内网穿透搭建Zblog博客网站并实现公网访问内网!

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员&#xff0c;自己搭建网站制作网页是绕…...

SmartCode ViewerX VNC 3.11 Crack

SmartCode ViewerX VNC 查看器 ActiveX 轻松地将 VNC 查看器功能添加到您的应用程序中 SmartCode ViewerX VNC Viewer ActiveX 使开发人员可以使用一组直观的 ActiveX 属性和方法完全访问 VNC 查看器功能。借助ViewerX控件&#xff0c;开发人员可以轻松地为其应用程序提供屏幕共…...

傻瓜式Java操作MySQL数据库备份

文章目录 前言存储数据库存储数据表 前言 数据库备份是开发工作中经常要做的事情&#xff0c;好处是mysql提供了一个非常好的命令 mysqldump&#xff0c;直接调用它就可以将数据以sql文件的形式备份出来。但是直接写命令非常不方便&#xff0c;遇到定时备份或者指定备份那么就需…...

redis常用操作命令

日升时奋斗&#xff0c;日落时自省 注&#xff1a;命令区分有点细&#xff0c;择取自己需要的即可 目录 1、单机架构 2、数据库和应用分离 3、分布式基本概念 3.1、应用&#xff08;Application&#xff09;/系统(System) 3.2、模块&#xff08;Module&#xff09;/组件&…...

pytorch gpu安装

cuda https://blog.csdn.net/qq_51570094/article/details/124148671 https://blog.csdn.net/zxdd2018/article/details/127705627 cudnn https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#installlinux-tar 更改cudnn 保证文件目录中只有一个解压后…...

uni跳转页面不缓存上一个页面的方法

一、前言 要实现一个需求&#xff0c;从a页面跳转到b页面&#xff0c;从b页面跳转到c页面&#xff0c;然后按返回&#xff0c;从c页面直接返回a页面&#xff08;不返回b页面&#xff09; a->b->c c->a 二、实现方法 前端框架使用的是uni-app&#xff0c;我们修改…...

排序:败者树和置换选择排序(解决外部排序中的优化问题)

1.算法目的&#xff08;败者树&#xff09; 解决多路平衡归并带来的问题。 在外部排序中&#xff0c;使用k路平衡归并策略, 选出一个最小元素需要对比关键字(k-1)次&#xff0c; 导致内部归并所需时间增加。&#xff08;可用“败者树”进行优化&#xff09; 2.败者树的定义 …...

【超分:光谱响应函数】

Spectral Response Function-Guided Deep Optimization-Driven Network for Spectral Super-Resolution &#xff08;光谱响应函数引导的深度优化驱动网络光谱超分辨&#xff09; 高光谱图像&#xff08;HSI&#xff09;是许多研究工作的关键。光谱超分辨率&#xff08;SSR&a…...

IoT 物联网 JavaScript 全栈开发,构建家居环境监控系统实战

智能家居环境监测端到端场景&#xff0c;全栈JavaScript开发&#xff0c;串联Ruff硬件、温湿度和空气质量传感器、阿里云 IoT、Serverless函数计算、百度ECharts可视化、最终以微信小程序形式在微信里实时展示家中实时温度&#xff0c;湿度&#xff0c;PM2.5指数。 01 技术架构…...

jupyter notebook可以打开,但无法打开.ipynb文件,报错500 : Internal Server Error

1、错误信息 2、解决办法 打开Anaconda Promt界面&#xff0c;进入自己的虚拟环境。在命令行输入以下指令&#xff1a; pip install --upgrade nbconvert...

latex图片编号+表格编号

对编号重新自定义 \renewcommand{\thefigure}{数字编号x}重新命名图的编号\renewcommand{\thetable}{数字编号x}重新命名表的编号编号含义 平时看书经常看到“图1.2”这样的编号&#xff0c;含义是第1章的第2幅插图&#xff1b;或者“图1.1.2”&#xff0c;含义是第1章第1节的…...

【1day】用友时空KSOA平台 imagefield接口SQL注入漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录...

linux之美

linux系统和window系统区别 Linux和Windows是两个不同的操作系统。Linux是一个开源操作系统&#xff0c;而Windows是一个商业操作系统。 Linux可以访问源代码并根据用户的需求进行修改&#xff0c;而Windows无法访问源代码。 Linux是免费的&#xff0c;而Windows是商业操作系…...

5、超链接标签

5、超链接标签 超链接标签就是我们常说的a标签 <a href"path" target"目标窗口位置">连接文本或图像</a> <!-- href&#xff08;必填项&#xff09;&#xff1a;连接路径 target&#xff1a;连接在哪个窗口打开&#xff1f;是在新页面打开…...

CCF CSP认证历年题目自练 Day15

CCF CSP认证历年题目自练 Day15 题目一 试题编号&#xff1a; 201709-1 试题名称&#xff1a; 打酱油 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   小明带着N元钱去买酱油。酱油10块钱一瓶&#xff0c;商家进行促销&#xf…...

APP的收费模式及特点

移动应用&#xff08;APP&#xff09;的收费模式多种多样&#xff0c;可以根据开发者的需求、目标受众和应用的性质来选择。以下是一些常见的APP收费模式及其特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎…...

opencv: 解决保存视频失败的问题

摘要&#xff1a;opencv能读取视频&#xff0c;但保存视频时报错。 一、首先要确保已经下载了openh264.dll文件&#xff0c;否则保存的视频无法打开&#xff0c;详细可以浏览这个&#xff1a;opencv&#xff1a;保存视频。 二、保存视频时出现一下问题&#xff1a; OpenCV:…...

网站流量合作/网络营销毕业论文范文

jdk动态代理和CGLIB动态代理测试。 我们先建好一个测试类 在这里插入代码片package test.dao;import org.springframework.stereotype.Component;Component public class DaoImpl implements Dao {Overridepublic void query() {System.out.println("DaoImpl");} }…...

网站建设 慕课/网络营销与网站推广的

流程&#xff1a; 17年底,mask-R CNN DPM、R-CNN、YOLO、SSD 1、基于传统图像处理和机器学习算法的目标检测与识别方法 传统的目标检测与识别方法主要可以表示为&#xff1a;目标特征提取->目标识别->目标定位。 这里所用到的特征都是认为设计的&#xff0c;例如SIFT (尺…...

网站如何做吸引人的项目/汕头seo托管

书上的代码已完全不可参考&#xff0c;只好按知识点从网上查资料一个一个实例 了。 <!DOCTYPE html> <html> <head><title>ExtJs</title><meta http-equiv"Content-Type" content"text/html; charsetutf-8"/><link…...

英文企业网站建设/网站外链优化方法

原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处、作者信息和本声明。否则将追究法律责任。http://caoyameng.blog.51cto.com/4975863/1359732运维自动化是2010年开始炒得很热的一个概念&#xff0c;也让很多工程师、用人单位瞎激动了很久…...

网站开发设计的论文/12345微信公众号

看完《狂飙》&#xff0c;我真的很震撼。故事讲述了一个叫罗伯特拉塞尔的男孩&#xff0c;他在一次汽车竞赛中发挥出了惊人的表现&#xff0c;他的勇敢和坚韧让我们受到了深刻的震撼。他的决心和毅力让他不断超越自我&#xff0c;不断取得新的成就&#xff0c;最终赢得了比赛。…...

wordpress xstore/徐州seo管理

这是一款jquery全屏响应式淡入淡出效果轮播图插件。该轮播图插件简单实用&#xff0c;兼容ie8浏览器&#xff0c;可以自动切换播放&#xff0c;带淡入淡出的动画效果。使用方法在页面中引入jquery和jquery.flexslider-min.js文件。HTML结构实用一个作为轮播图的容器&#xff0c…...