linux expr功能详解

expr命令可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能。它还具个特殊功能,判断变量或参数是否为整数、是否为空、是否为0等。

1.字符串表达式
-------------------------
'expr'支持模式匹配和字符串操作。字符串表达式的优先级高于数值表达式和逻辑关系表达式。'STRING : REGEX'执行模式匹配。两端参数会转换为字符格式,且第二个参数被视为正则表达式(GNU基本正则),它默认REGEX中隐含了"^",所以使得匹配时都是从string首字符开始的。随后将第一个参数和正则模式做匹配。 如果匹配成功,且REGEX使用了'\('和'\)',则此表达式返回匹配到的,如果未使用'\('和'\)',则返回匹配的字符数。 如果匹配失败,如果REGEX中使用了'\('和'\)',则此表达式返回空字符串,否则返回为0。 只有第一个'\(...\)'会引用返回的值;其余的'\(...\)'只在正则表达式分组时有意义。 在正则表达式中,'\+','\?'和'\|'分表代表匹配一个或多个,0个或1个以及两端任选其一的意思。]# expr "ab->cd" : ".*-"    #没有\(\),若正则匹配,只返回匹配的字符串长度3]# expr "ab->cd" : ".*->"   #没有\(\),若正则匹配,只返回匹配的字符串长度4]# expr "ab->cd" : ".\+"   #没有\(\),若正则匹配,只返回匹配的字符串长度6]# expr "ab->cd" : "\(.*\)->\(.*\)"  #有多个\(\),若正则匹配,只返回第一个\(\)内容ab]# expr  "ab->cd" : "\(a.\)"ab
'match STRING REGEX'等价于'STRING : REGEX'。]# expr match "ab->cd"  "\(.*b.*\)"ab->cd
'substr STRING POSITION LENGTH'返回STRING字符串中从POSITION开始,长度最大为LENGTH的子串。如果POSITION或LENGTH为负数,0或非数值,则返回空字符串。]# expr substr "ab->cd"  3 2->
'index STRING CHARSET'CHARSET中任意单个字符在STRING中最前面的字符位置。如果在STRING中完全不存在CHARSET中的字符,则返回0。见后文示例。]# expr index "ab->cd"  "-"3//该命令将对字符串"dec"逐字符分解,首先分解得到第一个字符d,从abcde中搜索到d的位置为4,再分解得到第二个字符e,该字符在abcde中的位置为5,最后得到的字符是c,该字符在abcde中的位置为3。其中3是最靠前的字符,所以命令返回的结果为3。]# expr index abcde dec3   ]# expr index abcde 1    //如果chars中的所有字符都不存在于string中,则返回0。0    
'length STRING'返回STRING的字符长度。其中string不允许为空,否则将报错]# expr length "ab->cd"6
'+ TOKEN'expr中有些符号和关键字有特殊意义,如"match"、"index"、"length",如果要让其成为字符,使用该表达式将任意token强制解析为普通字符串。]# expr + "substr" : "\(s.*\)"substr]# expr length + "substr"6要让expr将关键字解析为普通的字符,必须使用引号包围。2.算术表达式
-------------------------- 
'expr'支持普通的算术操作,算术表达式优先级低于字符串表达式,高于逻辑关系表达式。 
'+ -'加减运算。两端参数会转换为整数,如果转换失败则报错。]# expr 3 + 47]# expr 3 - 4-1
'* / %'乘,除,取模运算。两端参数会转换为整数,如果转换失败则报错。算术乘法符号"*"因为是shell的元字符,所以要转义,可以使用引号包围,或者使用反斜线]# expr 4 \* 312]# expr 4 / 31]# expr 4 % 313.逻辑关系表达式
--------------------------- 
'expr'支持普通的逻辑连接和逻辑关系。它的优先级最低。'|'|需要转义\|,或使用引号包围'|'正确的应该是:如果第一个参数非0,则返回第一个参数的值,否则返回第二个参数。但如果任意一个参数为空,则报错。除非空字符串使用引号包围,此时将和0的处理方式一样。]# expr 1 '|' 21]# expr 1 '|' 01]# expr 0 '|' 11# expr 0 '|' 00]# expr $ab '|' 1    #$ab为空expr: syntax error]# expr "$ab" '|' 1  #"$ab"为空字符串,相当于01
'&'    &需要转义\&,或使用引号包围'&'如果两个参数都非0,则返回第一个参数,否则返回0。但任意一个参数为空,则报错。除非空字符串使用引号包围,此时将和0的处理方式一样。]# expr 1 '&' 00]# expr 1 '&' 21]# expr 1 '&' 00]# expr 0 '&' 10]# expr $ab '&' 1  #$ab为空,报错expr: syntax error]# expr "$ab" '&' 1  #"$ab"为空字符,相当于00 
'< <= = == != >= >'比较两端的参数,如果为true,则返回1,否则返回0。"=="是"="的同义词。"expr"首先尝试将两端参数转换为整数,并做算术比较,如果转换失败,则按字符集排序规则做字符比较。比较操作符< <= = == != >= >用法示例。其中"<"和">"是正则表达式正的锚定元字符,且"<"会被shell解析为重定向符号,所以需要转义或用引号包围。这些操作符会首先会将两端的参数转换为数值,如果转换成功,则采用数值比较,如果转换失败,则按照字符集的排序规则进行字符大小比较。   括号'()'可以改变优先级,但使用时需要使用反斜线对括号进行转义。]# expr 4 '*' 4 - 10 '>=' 6  1]# expr 4 '*' \( 4 - 10 \) '>=' 6  04.'expr'使用示例
------------------------------- 
以下为expr的一些示例,其中有将shell的元字符使用引号包围的示例。 将shell中变量'foo'的值增加1: foo=$(expr $foo + 1)输出变量路径变量'$fname'中不包含'/'的文件名部分: expr "$fname" : '.*/\(.*\)' '|' "$fname"    解释:其中的'|'是expr中的连接符,只不过是被引号包围防止被shell解析。例如$fname=/etc/hosts,则此表达式返回hosts,如果$fname=/usr/share/,则此表达式'|'的左边为空,所以返回'|'右边的值,即$fname,即返回/usr/share/。An example showing that '\+' is an operator: expr aaa : 'a\+'    # 解释:因为REGEX部分没有使用\(\),所以返回匹配的字符数=> 3 expr abc : 'a\(.\)c'  # 解释:因为REGEX部分使用了\(\),所以返回匹配的字符=> bexpr index abcdef cz=> 3expr index index a    # 解释:因为第二个index是关键字error-> expr: syntax errorexpr index + index a  # 解释:使用+将index关键字解析为普通字符串=> 0

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

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

相关文章

Unity2D游戏制作入门 | 14( 之人物实装攻击判定 )

上期链接&#xff1a;Unity2D游戏制作入门 | 13 ( 之人物三段攻击 )-CSDN博客 上期我们聊到给人物添加三段攻击的动画&#xff0c;通过建立新的图层动画当我们按下攻击按键就会自动切换进攻击的动画&#xff0c;如果我们连续按下攻击键&#xff0c;我们还可以进行好几段的攻击…

S32K3通过S32DS实现:S32K3如何将FLASH驱动放到RAM里面、RAM如何实现软件复位数据不丢失操作。

目录 1、概述 2、默认flash存放位置展示 3、通过默认的链接文件将flash放置到RAM 4、通过修改启动与链接文件将flash放在RAM 5、RAM热复位数据不丢失 1、概述 在通过RTD的SDK也好MCAL也好,始终存在一个问题,生成的代码除了看门狗模块,默认都是放在flash里面,按照正常逻…

自动统计一个学科领域中总共有多少研究者

问题&#xff1a;怎么知道一个学科领域中总共有多少研究者&#xff1f; 方法&#xff1a;学者的谷歌学术主页中会有对应的领域&#xff0c;以进化计算为例&#xff0c;进入一位进化计算学者的谷歌主页&#xff0c;然后进入标签“Evolutionary Computation”&#xff0c;只要知…

lombok不起作用排查

1.idea中lombok插件已安装并启用 2.idea中annotation processors已勾选 3.项目中gradle或maven已引入lombok依赖 但提示还是找不到get,set方法。 还需要启用annotationProcessor 重点是annotationProcessor的配置&#xff0c;没有配置这个才是问题出现的关键&#xff01;&…

嵌入式模拟电路面试题大全及参考答案(持续更新)

目录 理想运算放大器的两个基本特性 共模抑制比(CMRR)及其重要性 负反馈在放大器中的作用 差分放大电路的工作原理 使用运算放大器构建非反相放大器 电源抑制比(PSRR) 带宽(BW)在放大器中的含义 计算RC低通滤波器的截止频率 基本的积分电路及其时间常数 增益-带…

富格林:读懂k线阻挠欺诈行为

富格林认为&#xff0c;k线是投资市场当中非常传统的价格表现图形&#xff0c;一般由开盘价、最高价、最低价和收盘价形成&#xff0c;而k线分析一直以来都是技术判断的重要组成部分。因此想要阻挠欺诈行为&#xff0c;自然就少不了对现货黄金k线的分析和判断。下面富格林将给大…

国产数据库与MYSQL兼容性?开发应该怎么选择?

国产数据库主要包括以下几种&#xff1a; TiDB&#xff1a;由 PingCAP 公司研发设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库&#xff0c;兼容 MySQL&#xff0c;支持无限的水平扩展&#xff0c;具备强一致性和高可用等特性。 华为GaussDB…

编程入门夜曲:揭开编程的神秘面纱

编程入门夜曲&#xff1a;揭开编程的神秘面纱 在数字时代的浪潮中&#xff0c;编程已成为一项炙手可热的技能。对于初学者来说&#xff0c;编程的世界既神秘又充满挑战。本文将带您走进编程的大门&#xff0c;从四个方面、五个方面、六个方面和七个方面为您揭示编程的奥秘&…

CSS-0_1 CSS和层叠(样式优先级、内联样式、选择器 用户代理样式)

CSS 的本质就是声明规则 ——《深入解析CSS》 文章目录 CSS层叠和优先级用户代理样式请和用户代理样式和谐相处 选择器单选择器的优先级选择器组的优先级关于选择器的其他源码顺序尽可能的选择优先级低的选择器 内联样式内联样式和JavaScript !important多个 !important 碎碎念…

【计算机毕业设计】230疫苗预约weixin小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【Linux】Jenkins Pipeline流水线详解及基于Jenkins流水线实现自动更新项目(实战)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

单链表的创建及排序

分数 5 作者 李卫明 单位 杭州电子科技大学 1.1编写程序&#xff0c;建立2个带头结点单链表&#xff0c;输入若干整数将正整数插入第1个单链表&#xff0c;将负整数插入第2个单链表&#xff0c;插入前和插入后单链表保持递增或相等次序&#xff0c;显示2个单链表&#xff0c…

用这个神级提示词插件,能让你的AI绘画工具Stable diffusion提示词直接写中文!

大家好&#xff0c;我是设计师阿威 最近&#xff0c;有同学在使用AI绘画工具 Stable Diffusion的时候和我说&#xff1a;老师&#xff0c;我英文不好&#xff0c;能不能直接让我写中文提示词啊&#xff1f;最好可以直接在SD的输入框就能直接写中文&#xff0c;不用切换网页或者…

Git--Part4--多人协作

theme: nico 在之前的Git博客中&#xff0c;已经把Git本地相关的操作以及远程操作的介绍完了。如下&#xff1a; Git–Part1–基础操作 - 掘金 (juejin.cn)Git–Part2–分支管理 - 掘金 (juejin.cn)Git–Part3–远程操作 & 配置 & 标签管理 - 掘金 (juejin.cn) 这篇文…

LVM逻辑卷 磁盘管理

传统分区使用固定大小分区&#xff0c;重新调整大小十分麻烦。 LVM可以弹性的管理逻辑卷的扩大缩小&#xff0c;可以随意将新的硬盘添加到LVM&#xff0c;直接扩展已经存在的逻辑卷。 示例场景&#xff1a;将两块硬盘合并成一个&#xff0c;并挂载到/data目录下。 常用命令&a…

vue大作业-端午节主题网站

vue大作业-端午节主题网站介绍 端午节&#xff0c;又称为龙舟节&#xff0c;是中国的传统节日之一&#xff0c;每年农历五月初五庆祝。这个节日不仅是纪念古代爱国诗人屈原的日子&#xff0c;也是家人团聚、共享美食的时刻。今天&#xff0c;我们非常高兴地分享一个以端午节为…

本地运行大语言模型(LLMs)

用例 像PrivateGPT、llama.cpp、Ollama、GPT4All、llamafile 等项目的流行度凸显了本地&#xff08;在您自己的设备上&#xff09;运行大型语言模型&#xff08;LLMs&#xff09;的需求。 这至少有两个重要的好处&#xff1a; 1.隐私&#xff1a;您的数据不会发送给第三方&a…

模拟 IQ 方法的知识

模拟 IQ 调制器&#xff08;用于发射器&#xff09;和 IQ 解调器&#xff08;用于接收器&#xff09;已经使用了数十年&#xff08;[1] 至 [3]&#xff09;。 近推出了新的A/D和D/A转换器&#xff0c;可以直接对1至4 GHz的IF进行采样&#xff1b;在第二、第三和第四奈奎斯特区…

1. zookeeper分布式协调者

zookeeper分布协调者 一、zookeeper介绍1、软件设计架构1.1 单体架构1.2 SOA架构/分布式1.3 微服务架构 二、zookeeper角色1、角色2、选举机制3、znode类型 三、zookeeper集群部署1、环境规划2、安装jdk3、安装配置zookeeper3.1 安装zookeeper3.2 编辑配置文件3.3 创建myid文件…

.NET C#基础:布尔表达式

介绍 本文讨论了 C# 编程中决策逻辑的基本方面&#xff0c;重点介绍了布尔表达式、运算符及其对处理客户数据和用户输入的 C# 应用程序开发人员的重要性。 学习目标&#xff1a; 使用运算符构造布尔表达式&#xff0c;以便进行比较和相等性测试。 采用内置的字符串类方法进行…