Bash编程中对字符串的操作

Bash的字符串操作

String="Hello World"

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

~$ 11
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将失效,按照实际字符位置进行截取,在-号前应当注意添加空格,不然会和默认变量值产生冲突

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就符合上述所说非常规整并可以非常方便的使用通配符进行匹配的字符串

ls
~$ a.jpg b.jpg c.jpg d.jpg
~$
#我们可以使用for循环遍历所有文件名
for i in ls;
do
    #在panttern匹配语法的后面添加一个.字符, .字符后面添加需要替换的字符
    mv ${i} ${i%.*}.png
done
~$ a.png  b.png  c.png  d.png
UPWER="upwer"
lower="LOWER"
#^^代表大写
echo ${UPWER^^}
~$ UPWER
#,,代表小写
echo ${lower,,}
~$ lower

#一目了然

Original: https://www.cnblogs.com/alanwoz/p/16385735.html
Author: alanWoz
Title: Bash编程中对字符串的操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607665/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Sharding-jdbc + Seata + Nacos整合

    前置条件 先了解Sharding-jdbc、Seata、Nacos这三样东西各自的作用以及单独使用时的配置。 如果已经做过Seata + Nacos的整合的,直接看最后的 Seat…

    Linux 2023年6月7日
    0111
  • R语言-基础绘图

    一、R语言绘图系统 二、绘图函数 2.1 高水平绘图函数 plot() 绘制散点图等多种图形 hist() 直方图 boxplot() 箱线图 stripchart() 点图 ba…

    Linux 2023年6月8日
    079
  • CentOS/Redflag 7.3安装qemu 5.0记录

    安装实际上相当简单,只需下载源代码并编译即可。 [En] Installation is actually quite simple, just download the sour…

    Linux 2023年5月27日
    0114
  • php uniapp 支付宝app支付,前后端实战源码

    uniapp端,前端代码 app.php端代码 Original: https://www.cnblogs.com/xiaofengzheng/p/16457966.htmlAut…

    Linux 2023年6月7日
    092
  • ASP.NET Core 2.2 : 二十三. 深入聊一聊配置的内部处理机制

    上一章介绍了配置的多种数据源被注册、加载和获取的过程,本节看一下这个过程系统是如何实现的。(ASP.NET Core 系列目录) 一、数据源的注册 在上一节介绍的数据源设置中,ap…

    Linux 2023年6月7日
    0149
  • Linux显示IP和主机名

    (1) ifconfig:Linux ifconfig命令用于显示或设置网络设备。 语法: ifconfig [网络设备][down up -allmulti -arp -prom…

    Linux 2023年6月8日
    0109
  • 什么?Android上面跑Linux?

    前言 众所周知,现在程序员因为工作、个人兴趣等对各种系统的需求越来越大,部分人电脑做的还是双系统。其中,比较常见的有各种模拟器、虚拟机在windows上面跑Android、Linu…

    Linux 2023年5月27日
    092
  • 剑指offer计划26(字符串中等)—java

    1.1、题目1 剑指 Offer 20. 表示数值的字符串 1.2、解法 这题表示直接上大佬的题解把。。。。代码太长了。有限状态自动机。对状态机一无所知的我一脸懵 1.3、代码 c…

    Linux 2023年6月11日
    0102
  • JavaScript事件处理(三)

    上机三 JavaScript事件处理 目的: 熟练掌握JavaScript事件处理机制 重点理解面向对象编程思想,并构建程序。 要求: 定义一个按钮,动态生成DIV,可以生成多个D…

    Linux 2023年6月13日
    098
  • 对不起

    如果您看到此页面,代表作者并没有完成此链接所指向的博文。请神犇们原谅本蒟蒻,本人承诺将尽快更新。 Original: https://www.cnblogs.com/Grharri…

    Linux 2023年6月6日
    096
  • POJ1979(Red and Black)–FloodFill

    题目在这里 题目意思是这样的,一个人起始位置在 ‘@’ 处,他在途中能到达的地方为 ‘ . ‘ 而 ‘#’ …

    Linux 2023年6月7日
    0106
  • Redis多线程原理详解

    从上图中可以看出只有以下3个地方用的是多线程,其他地方都是单线程: 1:接收请求参数 2:解析请求参数 3:请求响应,即将结果返回给client 很明显以上3点各个请求都是互相独立…

    Linux 2023年5月28日
    091
  • 初识pytest

    现在这份工作一直做硬件和算法方面,但本人还是很喜欢玩web,所以自学分享一下。 如何安装pytest 其实很简单 pip install pytest pip install -U…

    Linux 2023年6月8日
    0100
  • 逆波兰表达式

    运用lambda表达式和包装器 150. 逆波兰表达式求值 – 力扣(LeetCode) class Solution { public: int evalRPN(ve…

    Linux 2023年6月13日
    0119
  • 操作系统实现-boot.asm实现

    博客网址:www.shicoder.top微信:18223081347欢迎加群聊天 :452380935 这一次我们进入操作系统实现的真实编码, 这一次主要是完善对boot.asm…

    Linux 2023年6月13日
    0137
  • vscode配置指南,美化技巧

    "workbench.colorCustomizations": { "editor.selectionBackground": &quot…

    Linux 2023年6月14日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球