首页 > 系统相关 >linux shell字符串截取的详细总结(实用!)

linux shell字符串截取的详细总结(实用!)

时间:2022-11-11 16:26:26浏览次数:71  
标签:字符 shell 截取 substr cut str linux 字符串

摘自:https://www.jb51.net/article/257063.htm

 更新时间:2022年07月27日 15:55:23   作者:悟空悟道     在开发的时候经常会自行写一些小的脚本,其中就用到截取字符串的操作,这篇文章主要给大家介绍了关于linux shell字符串截取的详细方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下   +
目录

一、字符串变量的截取操作

对字符串变量的截取操作一般都是通过${操作符}的方式进行,如下:

1.从指定位置(index)截取固定长度

格式:${string:start:length}

其中,string 是要截取的字符串,start 是起始位置(下标从 0 开始计数),length 是要截取的长度(省略的话表示直到字符串的末尾)

例如:

1 2 3 4 5 str_time='2022-02-01 12:30:58' date_no=${str_time:0:10}          #截取前面10位字符:2022-01-01 date_mon=${str_time:5:2}         #从前面第6位开始截取2位字符:02 date_time=${str_time:0-8}         #截取后面8位字符:12:30:58 date_hh=${str_time:0-8:2}         #截取后面8位字符的前面两位:12

2.截取指定字符串(子字符串)左边的字符

格式1:${string%substr*}                          #匹配从右往左第一个substr

格式2:${string%%substr*}                       #匹配从右往左最后一个substr

说明:上面%的运算实际上可以理解为,删除substr以及substr右边的任意字符串,*号在substr右边,从而得到substr左边剩余字符串。  格式1和格式2的区别是匹配substr的位置

例如:

1 2 3 v_str='/app/logs/133.38.112.177_202204111015.log' echo ${v_str%/*}              #截取从右往左第一个'/' 左边的字符:/app/logs echo ${v_str%%/*}           #截取从右往左最后个'/' 左边的字符:空

3.截取指定字符串(子字符串)右边的字符

格式1:${string#*substr}                          #匹配从左往右第一个substr

格式2:${string##*substr}                        #匹配从左往右最后一个substr

说明:上面'#'的运算实际上可以理解为,删除substr以及substr左边的任意字符串,*号在substr的左边,从而得到substr右边剩余字符串。  格式1和格式2的区别是匹配substr的位置

例如:

1 2 3 4 5 v_str='/app/logs/133.38.112.177_202204111015.log' #截取从左往右第一个'/' 右边的字符:app/logs/133.38.112.177_202204111015.log echo ${v_str#*/} #截取从左往右最后个'/' 右边的字符:133.38.112.177_202204111015.log echo ${v_str##*/}

注意:用%和#截取字符串的用法,比较容易忘记容易混淆。

有个小技巧加以区别

键盘上#号在$符号的左边,所以是操作并删除左边字符,所以*在substr左边,一个#号代表取第一个substr(从左往右):${string#*substr}

键盘上%号在$符号的右边,所以是操作并删除右边字符,所以*在substr的右边,一个%代表取第一个substr(从右往左):${string%substr*} 

二、用cut命令截取(适合处理管道流或行文本字符)

格式:cut OPTION... [FILE]

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

OPTION:

  • -b :以字节为单位选取指定的字节数
  • -c :以字符为单位选取指定的字符数
  • -d :指定分隔符(默认是tab)将字符串分为多个区域,一般与-f参数一起使用
  • -f :与-d一起使用,指定选取哪个区域
  • -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除

用法:

例如:处理test.txt文件,截取每一行的指定字符

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 cat test.txt  a_202204110214_10.251.82.225 b_202204110215_10.251.82.223 b_202204110212_10.251.82.226 c_202204110214_10.251.82.228   -b选项:   $ cut -b 1,3 test.txt   #截取1,3字节   a2 b2 b2 c2   $ cut -b 1-3 test.txt   #截取1到3字节   a_2 b_2 b_2 c_2   -c选项:   $ cut -c 1,3 test.txt   #截取1,3字符   a2 b2 b2 c2   $ cut -c 1-3 test.txt   #截取1到3字符   a_2 b_2 b_2 c_2   -d -f选项:   $ cut -d'_' -f3 test.txt   #以下划线分割,取第三个区域字符   10.251.82.225 10.251.82.223 10.251.82.226 10.251.82.228   $ cat test.txt | cut -d'_' -f3   #结合管道使用效果一样

补充:使用%和%%:截取的是指定字符前边内容

1 2 3 4 5 6 7 8 9 val=“hello++world++shell”   echo ${val%++*} # 删除最后一个 ++ 后边字符,截取前边剩下的内容 # 输出: hello++world   echo ${val%%++*} # 删除第一个 ++ 后边字符,只截取保留第一个 ++ 前边的内容 # 输出: hello 

示例 截取文件名字,去掉后缀

1 2 3 4 5 str_file="123.hello.json"   echo ${str_file%.*} # 删除最后一个 . 后边的json,截取123.hello # 输出: 123.hello

标签:字符,shell,截取,substr,cut,str,linux,字符串
From: https://www.cnblogs.com/LiuYanYGZ/p/16880850.html

相关文章

  • linux 以太网命名规则
          参考:https://blog.csdn.net/maomao5945/article/details/79354204https://www.cnblogs.com/bfhyqy/p/13512241.htmlhttps://access.re......
  • Linux 定时任务crontab监控重启java服务脚本
    linux服务器下,利用Linux定时器和简单监控脚本,监控自动重启java服务。注意:脚本最好在Linux系统中用touch建立.sh文件,并用shmod+x+‘脚本文件名’,在window下编辑有可能会......
  • 【网络IO模型(二)】Linux IO 模型
    作为软件开发者特别是server开发,平时要面对大量的跨进程交互场景,各种跨进程调用。虽然现在的开发语言为我们提供了很好的封装,不用过度关心底层网络io的细节,但是作为开发者,还......
  • vm ware 安装 ubuntu server linux
    在:https://ubuntu.com/download/server中下拉找到“UbuntuServer20.04LTS”,下载ISO. 在VMWARE中,如果鼠标和键盘被虚拟机占用,想切回主机,记得按CTRL+ALT 。 ......
  • 2.linux下安装软件
    ubuntu下常用有的安装方式有哪些呢?rpm软件包,手动安装,需要解决依赖关系,很烦,不推荐apt自动化安装,自动处理依赖关系,很好用,推荐源代码安装,可以自定义,如安装目录等 1.ap......
  • 【Linux】问题排查
    排查cpu问题1.使用top命令查看进程top2.使用top命令查看线程top-H-ppid,这里-H表示详细展示线程信息3.打印线程idprintf'%x\n'pid4.使用jstack命令查看线程栈jstack......
  • Linux可视化管理工具cockpit
    Cockpit简介Cockpit是CentOS8内置的一款基于Web的可视化管理工具,对一些常见的命令行管理操作都有界面支持,比如用户管理、防火墙管理、服务器资源监控等,使用非常方便,号称......
  • linux并行执行线程
    资料来源:(1) https://www.jianshu.com/p/d8d58846c53f(作者:黄甫一)1.并行任务较少时:(1)给需要并行运行的命令行在结尾加上"&",代表放到后台运行;(2)在所有并行任......
  • 软件测试工作中需要的Linux知识,一篇文章就够了
    Linux基础1、Linux系统简单介绍Linux是一套免费使用,支持多用户、多任务、支持多线程和多个核心CPU的操作系统;很多中型,大型甚至是巨型项目都在使用Linux。Linux的发......
  • rabbitMQ安装(Linux)
    1.查看服务器对应版本 下载的rabbit跟Erlang安装包其中的el7表示RedHat7.x,即CentOS7.x 2.下载rabbitMQ注意:下载的安装包对应CentOS的版本号rabbitMQ官网:https:/......