美文网首页
Bash基础语法学习(二)-字符串

Bash基础语法学习(二)-字符串

作者: summer_code | 来源:发表于2022-07-06 09:15 被阅读0次

1.字符串长度

mystring=akdjakdaldjadklja
echo ${#mystring}
17
//大括号{}是必需的,否则 Bash 会将$#理解成脚本的参数个数,将变量名理解成文本。
echo $#
0

2.子字符串
字符串提取子串的语法如下。

${varname:offset:length}
count=frogfootman
echo ${count:4:4}
foot
echo ${count:0:4}
frog
//这种语法不能直接操作字符串,只能通过变量来读取字符串,并且不会改变原始字符串。
//如果省略length,则从位置offset开始,一直返回到字符串的结尾。
echo ${count:4}
footman
foot="abcdefghijk"
echo ${foot: -2} //从倒数第2个字符开始截取,即从j截取2个字符 注:负数前要空格
jk
echo ${foot: -5:3} //从倒数第5个字符开始截取,取3个字符 即:从g截取
ghi
echo ${foot: -5:-2} //从倒数第5个字符截取,截取后去掉末尾2个字符, 即:ghijk 去掉 jk
ghi
echo ${foot: -5:-1}  //从倒数第5个字符截取,截取后去掉末尾1个字符,
ghij

3.搜索与替换
(1)字符串头部的模式匹配。

以下两种语法可以检查字符串开头,是否匹配给定的模式。如果匹配成功,就删除匹配的部分,返回剩下的部分。原始变量不会发生变化

# 如果 pattern 匹配变量 variable 的开头,
# 删除最短匹配(非贪婪匹配)的部分,返回剩余部分
${variable#pattern}

# 如果 pattern 匹配变量 variable 的开头,
# 删除最长匹配(贪婪匹配)的部分,返回剩余部分
${variable##pattern}
mypath=/home/cam/book/long.file.name
echo ${mypath#/*/}
cam/book/long.file.name
echo ${mypath##/*/}
long.file.name
//匹配的模式是/*/,其中*可以匹配任意数量的字符,所以最短匹配是/home/,最长匹配是/home/cam/book/。
echo ${mypath##*/}    //*/会匹配目录部分,相当于删除文件路径
long.file.name
//例2
phone="555-456-1414"
echo ${phone#*-}   //这里的*-会匹配到 555-
456-1414
echo ${phone##*-} //这里的*-会匹配到 555-456-
1414
echo ${phone#333}  //这里匹配不成功会返回原字符串
555-456-1414

如果要将头部匹配的部分,替换成其他内容,采用下面的写法。

# 模式必须出现在字符串的开头
${variable/#pattern/string}
echo ${phone/#555/400}
400-456-1414

(2)字符串尾部的模式匹配。
以下两种语法可以检查字符串结尾,是否匹配给定的模式。如果匹配成功,就删除匹配的部分,返回剩下的部分。原始变量不会发生变化。

# 如果 pattern 匹配变量 variable 的结尾,
# 删除最短匹配(非贪婪匹配)的部分,返回剩余部分
${variable%pattern}

# 如果 pattern 匹配变量 variable 的结尾,
# 删除最长匹配(贪婪匹配)的部分,返回剩余部分
${variable%%pattern
mypath=/home/cam/book/long.file.name
echo ${mypath%.*}  //从尾部往前匹配,当找到第一个.时就返回
/home/cam/book/long.file
echo ${mypath%%.*}
/home/cam/book/long
//匹配模式是.*,其中*可以匹配任意数量的字符,所以最短匹配是.name,最长匹配是.file.name。
echo ${mypath%/*}
/home/cam/book
//后缀名替换
echo ${mypath%.name}.text
/home/cam/book/long.file.text

(3)任意位置的模式匹配。
以下两种语法可以检查字符串内部,是否匹配给定的模式。如果匹配成功,就删除匹配的部分,换成其他的字符串返回。原始变量不会发生变化

# 如果 pattern 匹配变量 variable 的一部分,
# 最长匹配(贪婪匹配)的那部分被 string 替换,但仅替换第一个匹配
${variable/pattern/string}

# 如果 pattern 匹配变量 variable 的一部分,
# 最长匹配(贪婪匹配)的那部分被 string 替换,所有匹配都替换
${variable//pattern/string}

4.改变大小写

# 转为大写
${varname^^}

# 转为小写
${varname,,}

相关文章

  • Bash基础语法学习(二)-字符串

    1.字符串长度 2.子字符串字符串提取子串的语法如下。 3.搜索与替换(1)字符串头部的模式匹配。 以下两种语法可...

  • shell script语法基础

    记录基础语法格式以及举例 #!/bin/bash 声明script使用bash名称 $((计算式)) 可以用这种格...

  • Swift基础语法(二)

    swift基础语法(一)swift基础语法二主要讲数据类型 1.字符串 1.在swift中String是一个结构体...

  • 读书笔记-认识Bash

    推荐【Docker基础与实战】 Bash当中命令的总结 Bash的基本语法 if语句-eq 等于-ne 不等于-l...

  • 【叔小生】JavaScript进阶篇

    如何插入JSJS基础语法语法、函数、方法提取字符串substring()substring() 方法用于提取字符串...

  • python的学习方向

    我的学习计划: 1、Python基础语法、python字符串解析、python时间和日历、python文件操作,数...

  • 一文精通Linux 命令行

    基础 1. 学习基础的bash用法,具体地说,阅读bash的man手册(man bash 并通读一遍);很简...

  • Markdown学习之二基础语法

    Markdown学习之二基础语法 语法基本规则 Markdown语法完全由标点符号组成 语法标点符号与内容之间要有...

  • JS基础和WebAPIs的关联性

    学习ECMAscript标准规定的基本语法掌握JS基础语法只学习JS基础做不了网页交互效果学习JS基础语法是为了后...

  • Python学习笔记-第2天: 开发环境和语法基础(1)

    第二天 开发环境和语法基础(1) 今天主要计划学习用VSCode搭建开发环境及Python语法基础学习涉及到的源码...

网友评论

      本文标题:Bash基础语法学习(二)-字符串

      本文链接:https://www.haomeiwen.com/subject/niidbrtx.html