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)

大家都在看

  • Linux使用SNAT实现局域网上网

    1、一台能上网的Linux机器 2、操作步骤 host-10-11 配置snat,开启路由转发 iptables -t nat -A POSTROUTING -s 10.10.10…

    Linux 2023年6月6日
    087
  • 误删除系列二:恢复已经删除文件

    背景:基于对恢复的好奇心,所以写一系列相关的博客,在linux没有回收站这一说法,通过rm -rf file的操作,如何恢复 以下的讨论分为两种情况: 删除后进程还能找到情况 删除…

    Linux 2023年6月7日
    067
  • 线程

    一、线程概念的引入 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区…

    Linux 2023年6月14日
    087
  • 用powershell实现,管理github自动化

    用powershell实现,管理github自动化 搜索关键字如下:PowerShellForGitHub powershell 传教士 原创文章。始于 2021-02-04 允许…

    Linux 2023年6月14日
    079
  • 错误域控降级导致解析问题

    近两天在给分部安装辅助域控的时候,总是安装不成功,或者安装时成功了但是无法复制主域或者其他域控的信息,同步失败,还有就是它一直没有网。 解决方案 经过排查发现域名dns解析不对,经…

    Linux 2023年6月8日
    0109
  • Redis Sentinel实现的机制与原理详解

    Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案。实际上这意味着你可以使用Sentinel模式创建一个可以不用人为干预而应对各种故障的Redis部署。 它…

    Linux 2023年5月28日
    0112
  • DNS

    DNS是域名系统(Domain Name System),简单来说就是平时上网输入的URL,如 www.baidu.com 就是域名,而DNS就是将这个域名解析成IP地址,如 ww…

    Linux 2023年6月7日
    075
  • SSH的 Write failed: Broken pipe 问题

    问题现象: 表示连接管道已经断开 解决方法: 方法一:客户端配置在客户端的 ~/.ssh/ config文件(如不存在请自行创建)中添加下面内容:ServerAliveInterv…

    Linux 2023年6月8日
    091
  • 零成本搭建个人博客之迁移Pages和域名

    在上文[零成本搭建个人博客之搭建篇]中,我将Hugo博客搭建到 Github Page上,后来考虑到用 Cloudflare cdn加速,干脆就把博客站点迁移到Cloudflare…

    Linux 2023年6月7日
    082
  • jmeter的一些概念知识

    前言 一、Jmeter的作用 – 1.jmeter进行接口操作 2. jmeter进行性能操作 二、Jmeter的一些概念的理解 – 1.事务 2. TPS…

    Linux 2023年6月14日
    0106
  • OpenStack 创建自定义的QCOW2格式镜像

    一、安装KVM虚拟机 1.1 虚拟机安装虚拟化软件包 注意:虚拟机指的是CentOS7.8 #挂载光盘 [root@cloudcs ~]# mount /dev/cdrom /mn…

    Linux 2023年6月8日
    084
  • C++ NFS挂载

    挂载NFS 挂载NFS时,常用的命令比如: #将远程目录挂载到本地/home/share目录下 mount -t nfs -o nolock 192.168.1.10:/tmp /…

    Linux 2023年6月8日
    074
  • 通过PowerShell实现SharePoint列表增删改

    通过 powershell 脚本实现 SharePoint 2010 列表项添加删除修改的例子。 接下来是获取列表: 当我们获取到列表后,就可以进一步获取列表项了。最直接的办法是调…

    Linux 2023年5月28日
    087
  • Springboot整合redis

    原文链接:https://blog.csdn.net/SDDDLLL/article/details/103703627 去年学习的Redis,刚刚学习完就迫不及待的在实战中用了一…

    Linux 2023年5月28日
    090
  • 运算符重载限制

    p387 5.表 11.1 中的大多数运算符都可以通过成员或非成员函数进行重载,但下面的运算符只能通过成员函数进行重载。 =:赋值运算符。 ():函数调用运算符。 []:下标运算符…

    Linux 2023年6月13日
    089
  • Linux编译安装、压缩打包与定时任务服务

    一、编译安装 即使用源代码编译安装的方式,编译打包软件。特点: 可以自定制软件; 可以按需构建软件; 编译安装案例 1、下载源代码包(这里以Nginx软件包源代码为例) wget …

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