广告
返回顶部
首页 > 资讯 > 操作系统 >Linux使用shell脚本处理字符串的实现方法
  • 567
分享到

Linux使用shell脚本处理字符串的实现方法

2023-06-09 12:06:13 567人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关linux使用shell脚本处理字符串的实现方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 截取字符串的前8位expr substr "$strin

这篇文章给大家分享的是有关linux使用shell脚本处理字符串的实现方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1. 截取字符串的前8位

expr substr "$string" 1 8echo $string | awk '{print substr(,1,8)}'echo $string | cut -c1-8echo $string | dd bs=1 count=8 2>/dev/null

2. 分割、替换字符串

2.1 命令说明

符号释义
*通配符,用于匹配字符串将被删除的子串
.分割符,可以为任意一个或多个字符
%从右向左匹配
#从左向右匹配
/表示替换
% # /非贪婪匹配,即匹配符合通配符的最短结果
% ## //贪婪匹配,即匹配符合通配符的最长结果
示例含义
${#VALUE}计算VALUE字符串的字符数量
${VALUE%.*} 或 ${VALUE%%.*}删除VALUE字符串中以分隔符"."匹配的右侧字符,保留左侧字符
${VALUE#*.} 或 ${VALUE##*.}删除VALUE字符串中以分隔符"."匹配的左侧字符,保留右侧字符
${VALUE/OLD/NEW} 或 ${VALUE//OLD/NEW}用NEW子串替换VALUE字符串中匹配的OLD子串

2.2 应用实例

定义变量name=odysee_odysee

计算VALUE字符串的字符数量

echo ${#name}  # 输出结果 13

删除VALUE字符串中以分隔符"."匹配的右侧字符,保留左侧字符

# 非贪婪匹配echo ${name%y*}  # 输出结果 odysee_od# 贪婪匹配echo ${name%%y*} # 输出结果 od

删除VALUE字符串中以分隔符"."匹配的左侧字符,保留右侧字符

# 非贪婪匹配echo ${name#*y}  # 输出结果 see_odysee# 贪婪匹配echo ${name##*y} # 输出结果 see

用NEW子串替换VALUE字符串中匹配的OLD子串

# 非贪婪匹配echo ${name/o/O} #输出结果 Odysee_odysee# 贪婪匹配echo ${name//o/O} #输出结果 Odysee_Odysee

3. 字符串截取

3.1 命令说明

示例含义
${VALUE:POSITioN}在字符串VALUE中,从位置POSITION开始提取子串(从左到右匹配)
${VALUE:POSITION:LENGTH}在字符串VALUE中,从位置POSITION开始提取长度为LENGTH的子串(从左到右匹配)
${VALUE:0-OFFSET}在字符串VALUE中,从右到左截取OFFSET个字符
${VALUE:0-OFFSET:LENGTH}在字符串VALUE中,从右到左截取OFFSET个字符的前LENGTH个

3.2 应用实例

定义变量name=mynameisodysee

在字符串name中,从位置2开始提取子串(从左到右匹配)

echo ${name:2} # 输出结果 nameisodysee

在字符串name中,从位置2开始提取长度为4的子串(从左到右匹配)

echo ${name:2:4} # 输出结果 name

在字符串name中,从右到左截取8个字符

echo ${name:0-8} # 输出结果 isodysee

在字符串name中,从右到左截取8个字符的前两个

echo ${name:0-8:2} # 输出结果 is

定义变量string=abc12342341 ,以下为截取示例

echo ${string:4}    # 从第4位开始截取后面所有字符串,输出结果:2342341echo ${string:3:3}   # 从第3位开始截取后面3位,输出结果:123echo ${string:3:6}   #从第3位开始截取后面6位,输出结果:123423  echo ${string: -4}   #截取后4位,输出结果:2341echo ${string:(-4)}   #同上  expr substr $string 3 3 #从第3位开始截取后面3位,输出结果123

定义变量str="abcdef",以下为截取示例

expr substr "$str" 1 3 # 从第一个位置开始取3个字符,输出结果:abc expr substr "$str" 2 5 # 从第二个位置开始取5个字符,输出结果:bcdef  expr substr "$str" 4 5 # 从第四个位置开始取5个字符,输出结果:def echo ${str:2}      # 从第二个位置开始提取字符串,输出结果:bcdef echo ${str:2:3}     # 从第二个位置开始提取3个字符,输出结果:bcd echo ${str:(-6):5}   # 从倒数第二个位置向左提取字符串,输出结果:abcde echo ${str:(-4):3}   # 从倒数第二个位置向左提取6个字符,输出结果:cde

4. 判断变量的值

4.1 命令说明

示例含义
${string-DEFAULT}如果string变量未定义,返回值为DEFAULT的值,否则返回变量的值
${string:-DEFAULT}如果string变量未定义,或者其值为空,返回值为DEFAULT的值,否则返回变量的值
${string=DEFAULT}如果string变量未定义,返回值为DEFAULT的值,并将DEFAULT赋值给string,否则返回变量的值
${string:=DEFAULT}如果string变量未定义,或者其值为空,返回值为DEFAULT的值,
 并将DEFAULT赋值给string,否则返回变量的值
${string+DEFAULT}如果string已赋值,其值用DEFAULT替换,否则不进行任何替换
${string:+DEFAULT}如果string已赋值,其值用DEFAULT替换,否则不进行任何替换
${string?ERR_MSG}当变量未被定义时,将ERR_MSG消息发送到标准错误输出
${string:?ERR_MSG}当变量未被赋值时,将ERR_MSG消息发送到标准错误输出

4.2 应用实例

${string-DEFAULT}:如果string变量未定义,返回值为DEFAULT的值,否则返回变量的值

# 未定义string变量echo ${string-string 变量未定义}  # 输出结果:string 变量未定义# 定义string变量,但值为空(会返回空值)string=echo ${string-string 变量未定义}  # 输出结果为空# 定义string变量并赋值string=testecho ${string-string 变量未定义}  # 输出结果:test

${string:-DEFAULT}:如果string变量未定义,或者其值为空,返回值为DEFAULT的值,否则返回变量的值

# 未定义string变量echo ${string:-string 变量未定义} # 输出结果:string 变量未定义# 定义string变量,但值为空string=echo ${string:-string 变量值为空} # 输出结果:string 变量值为空# 定义string变量并赋值string=testecho ${string:-string 变量值为空} # 输出结果:test

${string=DEFAULT}:如果string变量未定义,返回值为DEFAULT的值,并将DEFAULT赋值给string,否则返回变量的值

# 未定义string变量echo ${string=123}  # 输出结果:123echo ${string}  # 输出结果:123# 定义string变量,但值为空(会返回空值)string=echo ${string=123}  # 输出结果为空echo ${string}# 定义string变量并赋值string=testecho ${string=123}  # 输出结果:testecho ${string}  # 输出结果:test

${string:=DEFAULT}:如果string变量未定义,或者其值为空,返回值为DEFAULT的值,并将DEFAULT赋值给string,否则返回变量的值

# 未定义string变量echo ${string:=123}  # 输出结果:123echo ${string}  # 输出结果:123# 定义string变量,但值为空string=echo ${string:=123}  # 输出结果:123echo ${string}  # 输出结果:123#定义string变量并赋值string=testecho ${string:=123}  # 输出结果:testecho ${string}  # 输出结果:test

${string+DEFAULT}:如果string已赋值,其值用DEFAULT替换,否则不进行任何替换

# 未定义string变量echo ${string+123}  # 输出结果为空echo ${string}  # 输出结果为空# 定义string变量,但值为空string=echo ${string+123}  # 输出结果:123echo ${string}  # 输出结果为空# 定义string变量并赋值string=testecho ${string+123}  # 输出结果:123echo ${string}  # 输出结果:test

${string:+DEFAULT}:如果string已赋值,其值用DEFAULT替换,否则不进行任何替换

# 未定义string变量echo ${string:+123}  # 输出结果为空echo ${string}  # 输出结果为空# 定义string变量,但值为空string=echo ${string:+123}  # 输出结果为空echo ${string}  # 输出结果为空# 定义string变量并赋值string=testecho ${string:+123}  # 输出结果:123echo ${string}  # 输出结果:test

${string?ERR_MSG}:当变量未被定义时,将ERR_MSG消息发送到标准错误输出

# 未定义string变量echo ${string?输出错误信息} # 输出结果:-bash: string: 输出错误信息echo ${string}  # 输出结果为空# 定义string变量,但值为空string=echo ${string?输出错误信息} # 输出结果为空echo ${string}  # 输出结果为空# 定义string变量并赋值string=testecho ${string?输出错误信息} # 输出结果:testecho ${string}  # 输出结果:test

${string:?ERR_MSG}:当变量未被赋值时,将ERR_MSG消息发送到标准错误输出

# 未定义string变量echo ${string:?输出错误信息} # 输出结果:-bash: string: 输出错误信息echo ${string}  # 输出结果为空# 定义string变量,但值为空string=echo ${string:?输出错误信息} # 输出结果:-bash: string: 输出错误信息echo ${string}  # 输出结果为空# 定义string变量并赋值string=testecho ${string:?输出错误信息} # 输出结果:testecho ${string}  # 输出结果:test

5. 获取字符串长度

# 定义变量string=abc12342341echo ${#string}  # 输出结果 11expr length $string # 输出结果 11expr "$string" : ".*" # 分号二边要有空格,这里的:根match的用法差不多

6. 获取字符串所在位置

# 定义变量str="abc"expr index $str "a" # 输出结果 1 expr index $str "b" # 输出结果 2 expr index $str "x" # 输出结果 0 expr index $str ""  # 输出结果 0

7. 获取从字符串开头到子串的最大长度

# 定义变量string=abc12342341expr match $string 'abc.*3' # 输出结果 9

8. 显示匹配的内容

# 定义变量string=abc12342341expr match $string '\([a-c]*[0-9]*\)' # 输出结果 abc12342341  expr $string : '\([a-c]*[0-9]\)'    # 输出结果 abc1  expr $string : '.*\([0-9][0-9][0-9]\)' # 输出结果 341 显示括号中匹配的内容

9. 显示不匹配的内容

# 定义变量string=abc12342341echo ${string#a*3}   # 从$string左边开始,去掉最短匹配子串,输出结果:42341 echo ${string#c*3}   # 这样什么也没有匹配到,输出结果:abc12342341echo ${string#*c1*3}  # 从$string左边开始,去掉最短匹配子串,输出结果:42341 echo ${string##a*3}  # 从$string左边开始,去掉最长匹配子串,输出结果:41echo ${string%3*1}   # 从$string右边开始,去掉最短匹配子串,输出结果:abc12342echo ${string%%3*1}  # 从$string右边开始,去掉最长匹配子串,输出结果:abc12# 定义变量str="abbc,def,ghi,abcjkl" echo ${str#a*c}     # 输出结果:def,ghi,abcjkl 一个井号(#) 表示从左边截取掉最短的匹配 (这里把abbc字串去掉) echo ${str##a*c}    # 输出结果:jkl       两个井号(##) 表示从左边截取掉最长的匹配 (这里把abbc,def,ghi,abc字串去掉) echo ${str#"a*c"}    # 输出结果:abbc,def,ghi,abcjkl  因为str中没有"a*c"子串 echo ${str##"a*c"}   # 输出结果:abbc,def,ghi,abcjkl  同理 echo ${str#*a*c*}    # 输出结果:空 echo ${str##*a*c*}   # 输出结果:空 echo ${str#d*f}     # 输出结果:abbc,def,ghi,abcjkl,  echo ${str#*d*f}    # 输出结果:ghi,abcjkl   echo ${str%a*l}     # 输出结果:abbc,def,ghi     一个百分号(%)表示从右边截取最短的匹配  echo ${str%%b*l}    # 输出结果:a           两个百分号表示(%%)表示从右边截取最长的匹配 echo ${str%a*c}     # 输出结果:abbc,def,ghi,abcjkl# 这里要注意,必须从字符串的第一个字符开始,或者从最后一个开始,可以这样记忆, 井号(#)通常用于表示一个数字,它是放在前面的;百分号(%)卸载数字的后面; 或者这样记忆,在键盘布局中,井号(#)总是位于百分号(%)的左边(即前面)

10. 去掉字符串末尾的字符

使用df -Th获取磁盘信息,并将使用率赋给变量来与阈值进行对比,如果存在%号无法进行对比,所以需要去掉变量中的%号,可以使用${var%?}的格式来去掉最后一个字符

#!/bin/bashroot_usage=$(df -TPh | grep -w "/" | awk '{print $6}')echo ${root_usage%?}

感谢各位的阅读!关于“Linux使用shell脚本处理字符串的实现方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Linux使用shell脚本处理字符串的实现方法

本文链接: https://www.lsjlt.com/news/255840.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux使用shell脚本处理字符串的实现方法
    这篇文章给大家分享的是有关Linux使用shell脚本处理字符串的实现方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 截取字符串的前8位expr substr "$strin...
    99+
    2023-06-09
  • Linux 使用shell脚本处理字符串的实现
    1. 截取字符串的前8位 expr substr "$string" 1 8 echo $string | awk '{print substr(,1,8)}' echo $string | cut -c...
    99+
    2022-06-04
    shell处理字符串 shell字符串处理
  • Linux shell脚本中字符串连接的方法
    如果想要在变量后面添加一个字符,可以用一下方法: $value1=home$value2=${value1}"="echo $value2 把要添加的字符串变量添加{},并且需要把$放到外面。这样输出的结...
    99+
    2022-06-04
    字符串 脚本 方法
  • shell脚本实现字符串的动态替换方法
    目录背景代码使用示例用shell实现某行字符串的替换背景 我们有时候需要完成字符串的多组替换,比如需要完成以下替换 将“小草”替换为“真是让人印象深刻”将“小狗...
    99+
    2022-10-24
  • Shell实现字符串处理的方法详解
    目录大小写转化获取字符串长度替换整体替换部分替换截取补充大小写转化 # 把变量中的第一个字符换成大写 ${test^} # 把变量中的所有小写字母,全部替换为大写 ${test^^} # 把变量中的第一个字符换成小写...
    99+
    2022-09-22
  • shell脚本字符串和数组的使用操作方法
    字符串 可以使用单引号和双引号定义字符串变量但是单引号中不支持变量解析 #! /bin/bash username="mayuan" str_1="hello ${username}" str_2='hello $...
    99+
    2022-06-04
    shell 字符串数组 shell 脚本字符串 shell 脚本数组
  • shell脚本中字符串截取的多种方法
    1.#号截取,删除左边字符,保留右边字符。        代码:echo ${var#*//}    &n...
    99+
    2022-10-18
  • Linux下shell脚本字符串变量拼接与赋值的方法
    本篇内容介绍了“Linux下shell脚本字符串变量拼接与赋值的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.字符串拼接shell脚...
    99+
    2023-06-28
  • shell脚本字符串处理的使用(分割、截取和拼接)
    目录1、分割2、截取3、拼接4、示例1、分割 按字符分割:${parameter//pattern/string} 。用string来替换parameter变量中所有匹配的pattern 示例: #!/bin/bash ...
    99+
    2023-03-23
    shell脚本字符串处理 shell 字符串处理
  • Linux shell脚本中字符串连接的方式是什么
    本篇内容介绍了“Linux shell脚本中字符串连接的方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如果想要在变量后面添加一个字...
    99+
    2023-06-09
  • Shell脚本中计算字符串长度的5种方法
    有时在Linux操作系统中需要计算某个字符串的长度,通过查询资料整理了下目前Shell中获取字符串的长度的多种方法,在这里分享给大家,方法如下: 方法1: 使用wc -L命令 wc -L可以获取到当前行的长...
    99+
    2022-06-04
    种方法 字符串 脚本
  • shell字符串匹配的实现方法
    这篇文章主要介绍了shell字符串匹配的实现方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、简介      Bash ...
    99+
    2023-06-09
  • Shell脚本实现查找字符串中某字符最后出现的位置
    需要对字符串查找其中某个字符最后出现的位置,这个在PHP (strrpos)或者Perl (rindex)里面都有现成函数可用的功能,在Shell里面居然一时想不出个道道来。在论坛上发贴也没人解答(不知道是...
    99+
    2022-06-04
    字符串 脚本 字符
  • Shell脚本如何实现查找字符串中某字符最后出现的位置
    这篇文章将为大家详细讲解有关Shell脚本如何实现查找字符串中某字符最后出现的位置,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。需要对字符串查找其中某个字符最后出现的位置,这个在PHP (strrpos)...
    99+
    2023-06-09
  • shell脚本字符串分割、截取和拼接的方法是什么
    今天小编给大家分享一下shell脚本字符串分割、截取和拼接的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、分割...
    99+
    2023-07-05
  • linux下shell脚本备份文件的方法实现
    目录1、shell自动备份2、关于find命令:1、shell自动备份 主要功能: 1)将pathSrc目录中的文件拷贝到pathDst目录中去。 具体步骤:先查询源目录和目标目录中的文件,分别存在fileSrc和fil...
    99+
    2022-08-22
  • Shell字符串截取的实现方法(非常详细)
    Shell 截取字符串通常有两种方式:从指定位置开始截取和从指定字符(子字符串)开始截取。 从指定位置开始截取 这种方式需要两个参数:除了指定起始位置,还需要截取长度,才能最终确定要截取的字符串。 既然需要指定起始位...
    99+
    2022-06-04
    Shell 字符串截取
  • 如何编写Shell脚本实现快速去除字符串中的空格
    这篇文章主要讲解了“如何编写Shell脚本实现快速去除字符串中的空格”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何编写Shell脚本实现快速去除字符串中的空格”吧!效果如下图所示,图上半...
    99+
    2023-06-09
  • Shell脚本中$符号的嵌套使用方法小结
    目录1 示例2 说明本文主要介绍在编写 Shell 脚本时,通过嵌套使用 $ 符号,间接获取变量或表达式的值的具体方法。 先说结论,在 Shell 脚本中,可以通过使用 eval 命令来实现 $ 符号的嵌套使用...
    99+
    2023-05-06
    Shell $符号嵌套 Shell $符号
  • Shell实现的iptables管理脚本的方法教程
    这篇文章主要讲解了“Shell实现的iptables管理脚本的方法教程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell实现的iptables管理脚本的方法教程”吧!代码如下:#!/b...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作