shell处理字符串
概念
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号声明字符串
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字符串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号声明字符串
- 双引号里可以有变量
- 双引号里可以出现转义字符
示例:
#单引号和双引号使用变量的区别
root@master:~$ name='huangSir'
root@master:~$ echo '$name'
$name
root@master:~$ echo "$name"
huangSir
#单引号中嵌套单引号
root@master:~$ echo ''hello world''
hello world
#双引号中嵌套单引号
root@master:~$ echo "'hello world'"
'hello world'
#单引号和双引号使用转义字符的区别
root@master:~$ echo '\"hello world\"'
\"hello world\"
root@master:~$ echo "\"hello world\""
"hello world"
字符串的各种操作
在 Shell 脚本中,字符串是常见的数据类型,可以通过多种方式对字符串进行处理,包括拼接、截取、替换、比较等操作。
字符串拼接
字符串拼接可以直接拼接,中间无需任何特殊字符
root@master:~$ str1="hello"
root@master:~$ str2="world"
root@master:~$ str3="$str1 $str2"
root@master:~$ echo $str3
hello world
root@master:~$ str3="${str1} like ${str2}"
root@master:~$ echo $str3
hello like world
获取字符串长度 ${#str}
统计字符长度(变量中有多少个字符)
#空格也算字符
root@master:~$ str="I Like Shell"
root@master:~$ echo ${#str}
12
截取字符串 ${str:index:index}
root@master:~$ str="hello world"
# 从索引下标为5开始,向后截取,索引下标为5的舍弃
root@master:~$ echo ${str:5}
world
# 从索引下标为2开始,向后截取5个字符
root@master:~$ echo ${str:2:5}
llo w
# 从索引下标为2开始,截取到倒数第6个字符
root@master:~$ echo ${str:2:-6}
llo
从索引下标为2开始,截取到倒数第7个字符
root@master:~$ echo ${str:2:-7}
ll
字符串替换
${str/newStr/oldStr}
将newStr替换为oldStr,仅替换第一个遇到的oldStr
root@master:~$ str="hello world"
root@master:~$ echo ${str/l/o}
heolo world
${str//newStr/oldStr}
将newStr替换为oldStr,替换所有的oldStr
root@master:~$ str="hello world"
root@master:~$ echo ${str//l/o}
heooo worod
字符串大小写转换
需要bash4+的版本
大写转换:${str^^}
root@master:~$ str="hello world"
root@master:~$ echo ${str^^}
HELLO WORLD
小写转换:${str,,}
root@master:~$ str="HELLO WORLD"
root@master:~$ echo ${str,,}
hello world
字符串分割为数组
root@master:~$ str="apple:banana:orange"
#按照:分割
root@master:~$ IFS=':' read -ra arr <<< "$str"
root@master:~$ echo ${arr[0]}
apple
root@master:~$ echo ${arr[1]}
banana
删除前缀或后缀
${str#word}:从变量左边开始删除,按照最短匹配删除${str##word}:从变量左边开始删除,按照最长匹配删除${str%word}:从变量右边开始删除,按照最短匹配删除${str%%word}:从变量右边开始删除,按照最长匹配删除
示例:
root@master:~$ str="file.txt.tar.gz"
root@master:~$ echo ${str#*.}
txt.tar.gz
root@master:~$ echo ${str##*.}
gz
root@master:~$ echo ${str%.*}
file.txt.tar
root@master:~$ echo ${str%%.*}
file
判断是否包含子串
if [[ $str == *World* ]]; then
echo "包含World"
fi
# 或使用正则表达式
if [[ $str =~ .*World.* ]]; then
echo "匹配成功"
fi
判断字符串是否为空
[[ -z "$str" ]]:为空返回真
[[ -n "$str" ]]:非空返回真
root@master:~$ name=
root@master:~$ [[ -z "$name" ]] && echo true || echo false
true
root@master:~$ [[ -n "$name" ]] && echo true || echo false
false
判断两个字符串是否相等
[[ $str1 == $str2 ]]:相等判断
[[ $str1 != $str2 ]]: 不等判断
root@master:~$ [[ "hello" == "hello" ]] && echo true || echo false
true
root@master:~$ [[ "hello" != "hello" ]] && echo true || echo false
false
shell处理字符串的更多相关文章
- Linux Shell 截取字符串
Linux Shell 截取字符串 shell中截取字符串的方法很多 ${var#*/} ${var##*/} ${var%/*} ${var%%/*} ${var:start:len} ${var: ...
- shell截取字符串的方法
参考文献: linux中shell截取字符串方法总结 [Linux]如何在Shell脚本中计算字符串长度? 截取字符串的方法一共有八种,主要为以下方法 shell中截取字符串的方法有很多中, ${ex ...
- shell 判断字符串是否为数字
本篇文章主要介绍了"shell 判断字符串是否为数字",主要涉及到shell 判断字符串是否为数字方面的内容,对于shell 判断字符串是否为数字感兴趣的同学可以参考一下. #!/ ...
- shell基础——字符串处理(转载)
Shell的字符串处理 1 得到长度 %x="abcd" #方法一 %expr length $x 4 # 方法二 %echo ${#x} ...
- shell 分割字符串存至数组
shell 分割字符串存至数组 shell编程中,经常需要将由特定分割符分割的字符串分割成数组,多数情况下我们首先会想到使用awk但是实际上用shell自带的分割数组功能会更方便.假如a=”one,t ...
- Linux shell去除字符串中所有空格
Linux shell去除字符串中所有空格 echo $VAR | sed 's/ //g'
- shell切分字符串到数组
shell切分字符串到数组 问题: 对于’aa,bb,cc,dd,ee’这样的字符串输出采用,分隔开的aa bb cc dd ee aa:bb is ok:/home/work按照":&qu ...
- 用Shell判断字符串包含关系的方法小结
这篇文章主要给大家介绍了关于用Shell判断字符串包含关系的几种方法,其中包括利用grep查找.利用字符串运算符.利用通配符.利用case in 语句以及利用替换等方法,每个方法都给出了详细的示例代 ...
- Linux shell 获得字符串所在行数及位置
shell 获得字符串所在行数及位置 01 获取字符串所在的行数 方式一:用grep -n [root@root]# cat test apple bit create delect exe flow ...
- 【shell比较字符串】
if [ 'AAA' = 'ABC' ]; then echo "the same" else echo "not the same" fi shell比较字符 ...
随机推荐
- Elasticsearch的分享
一.生活中的数据 搜索引擎是对数据的检索,所以我们先从生活中的数据说起.我们生活中的数据总体分为两种: 结构化数据 非结构化数据 结构化数据: 也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格 ...
- rpc项目中的长连接与短连接的思考
对于rpc项目,在接受大佬指导的时候曾问过对于长连接和短连接是处理处理的,在面试的时候也被问起socket是长连接还是短连接,发现自己没有好好思考过这个问题,因此好好总结一下. 前置知识点:rpc基础 ...
- Linux glibc自带哈希表的用例及性能测试
今天来看看Linux和一些常见的BSD系统上自带的hashmap. 是的,系统自带的.因为POSIX标准定义了一些常见的数据结构(比如哈希表.二叉搜索树.队列)和算法(比如二分查找和快速排序),这些接 ...
- Akka中使用Logback日志框架
Akka提供的默认日志系统只输出到控制台,这种日志系统不可以用到产品环境,当然你可以整合SLF4J这样的日志系统,下面介绍如何在Akka中使用Logback记录日志. 1. 创建Maven工程引入相关 ...
- Protobuf生成文件报错
Mac下protobuf生成文件报错问题解决办法,windows下就不会这么麻烦了,如果linux下出现类似报错信息按照下面的解决逻辑依然适用. 1.由--go_out引发的报错 1.报错信息: us ...
- Kali 安装并配置 Nessus
Kali 安装并配置 Nessus 安装 Nessus 创建nessus文件夹 sudo mkdir /opt/nessus 下载 Nessus ( https://www.tenable.com/d ...
- FLink同步mysql到Iceberg丢数问题排查解决
一.问题背景 数据对比程序发现通过Flink cdc同步mysql写入Iceberg表运行一段时间后存在丢数问题,排查到丢数是由于hivemetastore钩子函数缺陷引起,由腾讯云EMR修复 钩子函 ...
- C#/.NET/.NET Core技术前沿周刊 | 第 25 期(2025年2.1-2.9)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- Scrapy 入门基础
原文学习参考链接:https://blog.csdn.net/u011054333/article/details/70165401 问题解决参考链接:https://blog.csdn.net/du ...
- DW - 问题
数据库三范式 1NF(First Normal Form):一个关系模式符合 1NF 的定义,则该关系模式是简单的.简单的意思就是不存在从属或重复的属性,即每个属性都是原子性的. 2NF(Second ...