ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Bash编程中字符串的操作

2022-06-17 15:00:25  阅读:149  来源: 互联网

标签:匹配 String 截取 编程 字符串 World Hello Bash


Bash的字符串操作

目录

1.获取字符串的长度
2.字符串内容截取
3.搜索和替换
4.大小写转换

1.获取字符串长度

String="Hello World"

#获取字符串长度,获取字符长度的变量调用应该使用${},这里大括号是必须的
#例1-1
echo ${#String}

~$ 11

2.字符串内容截取

String="Hello World"

#${String:开始截取的位置:结束截取的位置}
#例1-2:
echo ${String:6:10}
~$ World 
#例1-2的开始位置是6,但是bash实际截取位置在6+1,即W字符的位置
#结束截取的位置是10,实际截取结果是d (d在此处是第11位字符). 可以得知bash在字符截取法上使用了N+1的方式

#字符串截取的缺省用法
#字符串截取可以缺省 “开始截取位置” 和 “结束截取位置” 中任意一个
#例1-3:
echo ${String:6}
~$ World
#缺省位置bash会默认使用最长位置进行填充,例1-3中从第6位开始截取到最后一位字符

#例1-4:
echo ${String::11}
~$ Hello World
#例1-4中bash将开始截取位置模式填充到了第一个字符,所以结果是获取全部的字符串

#字符串截取可以使用负数的办法进行截取
#例1-5
echo ${String: -6}
~$ World
#使用负数时N+1将失效,按照实际字符位置进行截取,在-号前应当注意添加空格,不然会和默认变量值产生冲突

3.搜索和替换

#pattern匹配模式
#panttern匹配模式有头部匹配模式和尾部匹配模式两种,在这两种匹配模式的基础之上还有贪婪匹配和非贪婪匹配.
#贪婪匹配的意思是匹配尽量多的内容,非贪婪匹配是匹配尽量少的内容,panttern匹配支持?,*,[]通配符
#所有匹配模式均是删除匹配到字符,且必须连续不中断.连续不中断的意思是匹配的字符中间没有任何的隔断
#例1-6
#头部匹配模式中的非贪婪匹配
String="Hello World, My name is Bash. Hello"
echo ${String#?e?}
~$ llo World, My name is Bash. Hello

echo ${String##?e?}
~$ lo World, My name is Bash. Hello
#在这个匹配中,贪婪匹配和非贪婪匹配的结果一致,字符串末尾的Hel并没有被匹配
#此时如果将字符串开头的Hello改成Helleo
 String="Helleo World, My name is Bash. Hello"
 
 echo ${String##?e?}
 ~$ leo World, My name is Bash. Hello
 #也并没有匹配到Helleo中的第二个?e?
 
 #尾部匹配模式的符号是%
 #例1-6-1
 echo ${String%?l?}
 ~$ Hello World, My name is Bash. He
 #会从字符串末尾匹配字符
 #贪婪匹配使用两个%%符号,匹配效果和##相比较就是从字符串末尾开始计算
#panttern匹配模式的匹配很奇怪,有一些不能理解, “非常规整并可以非常方便的使用通配符进行匹配的字符串” ,否则不建议使用panttern匹配
#例:1-6-2 (来自https://wangdoc.com/bash/string.html)
myPath=root/home/cam/book/long.file.name

echo ${myPath%/*}
~$ root/home/cam/book

echo ${myPath%%/*}
~$ root
#例1-6-2就符合上述所说非常规整并可以非常方便的使用通配符进行匹配的字符串

标签:匹配,String,截取,编程,字符串,World,Hello,Bash
来源: https://www.cnblogs.com/alanwoz/p/16385735.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有