【shell】字符串截取&替换&分割

这篇具有很好参考价值的文章主要介绍了【shell】字符串截取&替换&分割。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、字符串输出

二、字符串截取

1.根据下标截取

2.根据指定字符截取

(1)使用 # 截取指定字符右边的所有内容

(2)使用 % 截取指定字符左边的所有内容

三、字符串替换

1.替换一个(从左到右)

2.替换一个(从右到左)

3.替换所有

四、字符串分割


一、字符串输出

shell字符串可以用单引号|/双引号包含,也可以不用引号。具体有什么区别呢?看下面的例子:

# 定义姓名变量
name="luna"

str1="hello ${name}!" # 使用双引号
str2='hello ${name}!' # 使用单引号
str3=hello ${name}! # 不使用引号

echo ${str1}
echo ${str2}
echo ${str3}

输出结果为:

hello luna!
hello ${name}!
run.sh:行10: luna!: 未找到命令

总结:
1) 由单引号包围的字符串:

  • 任何字符都会原样输出,在其中使用变量是无效的。
  • 字符串中不能出现单引号,即使对单引号进行转义也不行。


2) 由双引号包围的字符串:

  • 如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。
  • 字符串中可以出现双引号,只要它被转义了就行。


3) 不被引号包围的字符串

  • 不被引号包围的字符串中出现变量时也会被解析,这一点和双引号包围的字符串一样。
  • 字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。

一句话总结:字符串直接用双引号包围,不容易出错。

二、字符串截取

shell字符串截取分两种,一种是根据字符位置(下标)截取;另一种是从指定字符开始截取。

1.根据下标截取

格式为:${string: start :length} 

string:表示源字符串

start:截取字符串的起始位置,注意第一个字符下标为0

length:截取字符串的长度

str="www.baidu.com"
# 想要输出baidu,第一个字符下标为4,字符串“baidu”长度为5
echo ${str:4:5}

# 输出结果为:
baidu

2.根据指定字符截取

这种方式无法指定截取字符串的长度,只能截取指定字符左边或者右边的所有内容。

(1)使用 # 截取指定字符右边的所有内容

格式:${string#*chars} 

其中,string 表示要截取的字符,chars 是指定的字符(或者子字符串),*是通配符的一种,表示任意长度的字符串。*chars连起来使用的意思是:忽略左边的所有字符,直到遇见 chars(chars 不会被截取)。

举个栗子:

str="http://www.baidu.com/luna"
echo ${str#*/}

# 输出结果
/www.baidu.com/luna

这里就会有一个问题,例子中字符串中有多个"/",如果我想要输出的是最后一个"/"后的所有字符,如何表示?

只需要在表达式中多加一个#,就算第一次匹配成功也不会结束,直到最后一次匹配成功。

str="http://www.baidu.com/luna"
echo ${str##*/}

# 输出结果
luna

(2)使用 % 截取指定字符左边的所有内容

 格式:${string%chars*} 

请注意*的位置,因为要截取 chars 左边的字符,而忽略 chars 右边的字符,所以*应该位于 chars 的右侧。其他方面%#的用法相同,这里不再赘述,仅举例说明:

str="http://www.baidu.com/luna"

echo ${str%www*}
echo ${str%/*}
echo ${str%%/*} # 此处使用了两个%

# 输出结果
http://
/www.baidu.com/luna
luna

三、字符串替换

1.替换一个(从左到右)

格式:${string/old/new}

 string:源字符串

old:源字符串中要被替换的内容

new:新字符串

从左到右找到string中的第一个old,用new替换。

str="test.zip-test1.zip"
echo ${str/.zip/.ZIP}

# 输出结果
test.ZIP-test1.zip

2.替换一个(从右到左)

格式:${string/%old/new}

从右到左找到string中的第一个old,用new替换。

str="test.zip-test1.zip"
echo ${str/%.zip/.ZIP}

# 输出结果
test.zip-test1.ZIP

3.替换所有

格式:${string//old/new}

 找到string中的所有old字符串,用new替换。

str="test.zip-test1.zip"
echo ${str//.zip/.ZIP}

# 输出结果
test.ZIP-test1.ZIP

四、字符串分割

shell字符串分割方式很多,基础使用掌握一种就够用了,个人倾向于使用awk。

日常使用场景为:按字符分割字符串,取其中第n个。

格式:echo ${str} | awk -F "分隔符" '{print $n}'

---------------- 字符串分割输出------------------------
str="www.baidu.com"

echo ${str} | awk -F "." '{print $1}'
echo ${str} | awk -F "." '{print $2}'
echo ${str} | awk -F "." '{print $3}'

# 输出结果
www
baidu
com

-----------------字符串分割赋值给变量-----------------------

str="hello java shell"
name=$(echo ${str} | awk -F " " '{print $2}')
echo ${name}

# 输出结果
java

本文参考链接:Shell字符串截取(非常详细)文章来源地址https://www.toymoban.com/news/detail-807317.html

到了这里,关于【shell】字符串截取&替换&分割的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Windows BAT批处理字符串相关操作(字符串定义、分割、拼接、替换、切片、查找)

    使用 set 来定义字符串 代码说明: 将字符串Hello赋值给string1的变量 使用 %string1%%string2% 的方式完成字符串的拼接。 代码说明: 用来连接字符串的字符串,如果包含了特殊字符则需要使用 ^ 转义,并且需要使用 \\\"\\\" 括起来,特殊字符包括(但不限于): 符号 作用 @ 命令行回显

    2024年02月12日
    浏览(45)
  • 爬虫009_字符串高级_替换_去空格_分割_取长度_统计字符_间隔插入---python工作笔记028

    然后再来看字符串的高级操作 取长度  查找字符串下标位置  判断是否以某个字符,开头结尾   计算字符出现次数   替换

    2024年02月14日
    浏览(48)
  • linux 再文件夹目录下,批量替换文件名、文件内容字符串

    基本使用命令 具体使用命令方法 1.替换文件内容 搜索当前目录下所有.DTA文件,并将文件中字符串\\\"string1\\\",替换为\\\"string2\\\" 2.替换文件名 搜索当前目录下所有.DTA文件,并将文件名中字符串\\\"string1\\\"替换为\\\"string2\\\". 3.批量替换文件内容 该目录及子目录下所有文件,将文件中所有的字符

    2024年02月16日
    浏览(60)
  • Linux学习,使用sed命令对文件内的指定字符串进行替换

    一、创建一个txt文件,用于做测试 vi huawei.txt 二、替换每行第一个huawei为apple,第三个“/”后,不加参数就是只替换第一个 sed -i \\\"s/huawei/apple/\\\" huawei.txt 实现效果: 三、替换每行所有的xiaomi为iphone,第三个“/”后,加参数g就是替换所有 sed -i  \\\"s/xiaomi/iphone/g\\\" huawei.txt 实现效果

    2024年02月17日
    浏览(56)
  • 【linux】 shell 之 字符串 -z, -n 判断

    -n : 字符串长度不等于 0 为真 ,助记符 no zero , example : -z : 字符串长度等于 0 为真 ,助记符 zero , example : 需要注意的是,在[]中,使用-z 或-n 判断字符串长度时,变量要加双引号 。 举例说明: 加了双引号才能正常判断是否为空: 使用了双中括号就不用了双引号

    2024年01月21日
    浏览(40)
  • chatgpt赋能python:Python字符串截取指南:如何截取指定位置字符串

    在Python中,字符串截取是一项非常常见的操作。当我们需要从一个字符串中提取特定位置的字符或子串时,我们可以使用Python内置的截取函数和切片操作来实现。在本文中,我们将介绍如何在Python中截取指定位置字符串,并提供一些有用的技巧和示例来帮助你更好地理解这一

    2024年02月08日
    浏览(63)
  • Python 字符串操作之字符串的截取

    字符串的截取是实际应用中经常使用的技术,被截取的部分称为“子串”。Java中使用函数substr()获取子串,C#使用函数substring()获取子串。而Python由于内置了序列,可以通过前面介绍的索引、切片获取子串,也可以使用函数split()来获取。字符串也属于序列。 下面这段代码使用

    2024年02月06日
    浏览(81)
  • Python截取字符串(字符串切片)方法详解

    从本质上讲,字符串是由多个字符构成的,字符之间是有顺序的,这个顺序号就称为索引(index)。Python 允许通过索引来操作字符串中的单个或者多个字符,比如获取指定索引处的字符,返回指定字符的索引值等。 知道字符串名字以后,在方括号[ ]中使用索引即可访问对应的

    2024年02月01日
    浏览(63)
  • mysql 拼接字符串,截取字符串 常用方式

    1,拼接字符串常用:CONCAT(‘需要拼接的字符串’,列名) CONCAT(\\\'+\\\',b.Telephone)查询出号码,前边加上+号 2,分割字符串 substring_index(b.Telephone,\\\'+\\\',1) 用从左往右的第一个+分割电话号码,获取分割后的从左往右的第一个字符串 比如 86+133333333 执行完后 为 86 substring_index(b.Telephone,\\\'+\\\',

    2024年02月14日
    浏览(50)
  • js如何截取某个字符串前面所有的字符串

    利用substring()方法截取出字符 1.新建一个字符串 2.通过indexOf()方法获取你想截止到的那个字符 3.通过substring()方法,从字符串0位置开始截取至\\\"p\\\"前面的字符串

    2024年02月12日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包