Bash 中常见的字符串操作
连接字符串
字符串连接的方式简单又直接:放在一起就可以了!
看下面的例子:
h="hello"
hw=${h}" world"
echo ${hw}
结果为:hello world
获取字符串长度
${#string}
MyString=abcABC123ABCabc
echo ${#MyString} # 结果为
注意这会自动去掉字符串结尾处的空格,如果在字符串中包含空格(开头、中间或结尾),就需要使用引号把字符串包裹起来:
MyString="abcABC123ABCabc "
echo ${#MyString} # 结果为
匹配字符串开头的子串长度
expr match "$string" '$substring'
$substring 是一个正则表达式。
MyString=abcABC123ABCabc
echo $(expr match "$MyString" 'abc[A-Z]*.2') # 结果为
索引
expr index $string $substring
在字符串 $string 中匹配到的 $substring 第一次出现的位置。
MyString=abcABC123ABCabc
echo $(expr index "$MyString" C12) # ,注意:索引是从 开始的。
提取子串
${string:position}
在 $string 中从位置 $position 处开始提取子串。
如果 $string 是 "*" 或者 "@",那么将会提取从位置 $position 开始的位置参数。
${string:position:length}
在 $string 中从位置 $position 开始提取 $length 长度的子串。
MyString=abcABC123ABCabc
echo ${MyString:} # ABC123ABCabc,注意:此时索引是从 开始的。
echo ${MyString::} # bcABC echo ${*:} # 打印出第 个和后边所有的位置参数。
echo ${@:} # 同上。
echo ${*::} # 从第 个开始, 连续打印 个位置参数。
expr match "$string" '\($substring\)'
从 $string 的开始位置提取 $substring,$substring 是正则表达式。
MyString=abcABC123ABCabc
echo $(expr match "$MyString" '\(.[b-c]*[A-Z]..[0-9]\)') # abcABC1
删除子串
${string#substring}
从 $string 的开头位置截掉最短匹配的 $substring。
${string##substring}
从 $string 的开头位置截掉最长匹配的 $substring。
MyString=abcABC123ABCabc
echo ${MyString#a*C} # 123ABCabc
# 截掉 'a' 到 'C' 之间最短的匹配字符串。 echo ${MyString##a*C} # abc
# 截掉 'a' 到 'C' 之间最长的匹配字符串。
${string%substring}
从 $string 的结尾位置截掉最短匹配的 $substring。
${string%%substring}
从 $string 的结尾位置截掉最长匹配的 $substring。
MyString=abcABC123ABCabc
echo ${MyString%b*c} # abcABC123ABCa
# 从 $MyString 的结尾位置截掉 'b' 到 'c' 之间最短的匹配。 echo ${MyString%%b*c} # a
# 从 $MyString 的结尾位置截掉 'b' 到 'c' 之间最长的匹配。
当你需要构造文件名的时候,这个操作就显得特别有用。
子串替换
${string/substring/replacement}
使用 $replacement 来替换第一个匹配的 $substring。
${string//substring/replacement}
使用 $replacement 来替换所有匹配的 $substring。
MyString=abcABC123ABCabc
echo ${MyString/abc/xxx} # xxxABC123ABCabc
echo ${MyString/ABC/XXX} # abcXXX123ABCabc
# 替换第一个匹配到的子串。 echo ${MyString//abc/xxx} # xxxABC123ABCxxx
echo ${MyString//ABC/XXX} # abcXXX123XXXabc
# 替换所有匹配到的子串。
${string/#substring/replacement}
如果 $substring 匹配 $string 的开头部分,那么就用 $replacement 来替换 $substring。
${string/%substring/replacement}
如果 $substring 匹配 $string 的结尾部分,那么就用 $replacement 来替换 $substring。
MyString=abcABC123ABCabc
echo ${MyString/#abc/XXX} # XXXABC123ABCabc
# 用 'XXX' 替换开头的 'abc'。 echo ${MyString/%abc/XXX} # abcABC123ABCXXX
# 用 'XXX' 替换结尾的 'abc'。
参考:
Linux Shell 字符串操作(长度/查找/替换)详解
Linux脚本shell字符串处理,基本都有
shell脚本抽取文本文件中指定字符串的方法
Bash 中常见的字符串操作的更多相关文章
- JavaScript中常见的字符串操作函数及用法
JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...
- 深圳尚学堂:JavaScript中常见的字符串操作
快到春节放假了,春节后又是一大波的找工作热潮,在前端实招聘笔试时,必不可免额会考到关于JavaScript中字符串的处理问题.考的不是你会不会,而是你能不能在不借用XX手册或者XX指南再或者百度谷歌的 ...
- JavaScript中常见的数组操作函数及用法
JavaScript中常见的数组操作函数及用法 昨天写了个帖子,汇总了下常见的JavaScript中的字符串操作函数及用法.今天正好有时间,也去把JavaScript中常见的数组操作函数及用法总结一下 ...
- LoadRunner中常用的字符串操作函数
LoadRunner中常用的字符串操作函数有: strcpy(destination_string, source_string); strc ...
- 【转】《深入理解计算机系统》C程序中常见的内存操作有关的典型编程错误
原文地址:http://blog.csdn.net/slvher/article/details/9150597 对C/C++程序员来说,内存管理是个不小的挑战,绝对值得慎之又慎,否则让由上万行代码构 ...
- 《深入理解计算机系统》C程序中常见的内存操作有关的典型编程错误
对C/C++程序员来说,内存管理是个不小的挑战,绝对值得慎之又慎,否则让由上万行代码构成的模块跑起来后才出现内存崩溃,是很让人痛苦的.因为崩溃的位置在时间和空间上,通常是在距真正的错误源一段距离之后才 ...
- 简单入门PHP中的多字节字符串操作
什么是多字节的字符串操作呢?其实不少的同学可能都已经使用过了,但我们还是要从最基础的问题说起. 一个字符占几个字节并不是我们表面上看到的那样.正常情况下,一个数字或英文以及英文符号都是占用一个字节的. ...
- PHP开发中常用的字符串操作函数
1,拼接字符串 拼接字符串是最常用到的字符串操作之一,在PHP中支持三种方式对字符串进行拼接操作,分别是圆点.分隔符{}操作,还有圆点等号.=来进行操作,圆点等号可以把一个比较长的字符串分解为几行进行 ...
- js String对象中常用方法小结(字符串操作)
1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码. strObj.charCodeAt(index) 说明: index将被处理字符的从零开始计数的编号.有效值为0到字符 ...
随机推荐
- Xamarin入门,开发一个简单的练手APP
之前周末用Xamarin练手做了个简单APP,没有啥逻辑基本就是个界面架子,MVVM的简单使用,还有Binding,Command的简单使用,还有一个稍微复杂点两个界面交互处理(子页面新增后关闭,父页 ...
- EasyUI datagrid.getSelections 没有返回正确的选择行数
Actually i solved the problem. It was because the idField of the table i was using was incorrect. it ...
- 转:更改SQLServer实例默认字符集
需求 安装数据库时,将字符集安装成了“SQL_Latin1_General_CP1_CI_AS”,现在需要将其更改为“Chinese_PRC_CI_AS”. 方法 重新生成系统数据库 ,然后还原配 ...
- sublime text 中 .vue文件中的scss语法无法高亮bug怎么解决
如题,在vuejs的单文件组件中,.vue 结尾的文件里面使用scss的时候,无法高亮.因为 sublime默认是不带sass语法高亮的,安装 sublime SCSS语法高亮包即可. 方法如下: ...
- 卷积运算的本质,以tensorflow中VALID卷积方式为例。
卷积运算在数学上是做矩阵点积,这样可以调整每个像素上的BGR值或HSV值来形成不同的特征.从代码上看,每次卷积核扫描完一个通道是做了一次四重循环.下面以VALID卷积方式为例进行解释. 下面是pyth ...
- RESTful API实战笔记(接口设计及Java后端实现)
写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...
- 分布式服务化系统一致性(分布式事务、ACID、BASE、CAP)原理与解决方案
https://blog.csdn.net/rickiyeat/article/details/70224722
- oracle全量、增量备份
采用0221222增量备份策略,7天一个轮回 也就是周日0级备份,周1 2 4 5 6 采用2级增量备份,周3采用1级增量备份 打开控制文件自动备份 CONFIGURE CONTROLFILE AUT ...
- 利用python scapy包进行抓包发包与ARP扫描
小技巧 通过在交互式的python解释器下,可以通过help()函数查看函数或模块的用途. dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表:带参数时,返回参数的属性.方法列表 ...
- PAT A1137 Final Grading (25 分)——排序
For a student taking the online course "Data Structures" on China University MOOC (http:// ...