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

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

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

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

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

格式:${string:start:length}

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

例如:

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的位置

例如:

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的位置

例如:

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文件,截取每一行的指定字符

$ 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   #结合管道使用效果一样

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

val=“hello++world++shell”

echo ${val%++*}
# 删除最后一个 ++ 后边字符,截取前边剩下的内容
# 输出: hello++world

echo ${val%%++*}
# 删除第一个 ++ 后边字符,只截取保留第一个 ++ 前边的内容
# 输出: hello 

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

str_file="123.hello.json"

echo ${str_file%.*}
# 删除最后一个 . 后边的json,截取123.hello
# 输出: 123.hello

总结

到此这篇关于linux shell字符串截取的文章就介绍到这了,更多相关linux shell字符串截取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 分享20个Unix/Linux 命令技巧

    分享20个Unix/Linux 命令技巧

    这篇文章主要介绍了分享20个Unix/Linux 命令技巧,需要的朋友可以参考下
    2015-04-04
  • Linux shell实现HTTP服务示例代码

    Linux shell实现HTTP服务示例代码

    这篇文章介绍的是如何实现一个可以调用shell脚本的HTTP服务,本文给出了详细的示例代码,有需要的可以参考借鉴。
    2016-08-08
  • 一天一个shell命令 linux文件操作系列-ln命令详解

    一天一个shell命令 linux文件操作系列-ln命令详解

    这篇文章主要介绍了一天一个shell命令 linux文件操作系列-ln命令详解 ,需要的朋友可以参考下
    2016-06-06
  • 详解gitBash中使用Linux中的tree命令

    详解gitBash中使用Linux中的tree命令

    最近很多同学问小编关于Linux命令的问题,小编今天主要介绍Linux里的tree命令,tree命令是一种递归目录列表显示命令,使用该命令可以以树状图的形式列出一个目录下所有文件内容,本文给大家介绍gitBash中使用Linux中的tree命令,一起看看吧
    2023-11-11
  • Linux 脚本编写基础知识

    Linux 脚本编写基础知识

    在学习shell 脚本之前,需要你了解很多关于shell的知识,这些知识是编写shell脚本的基础,所以希望你能够熟练的掌握
    2013-05-05
  • Python执行Linux系统命令的4种方法

    Python执行Linux系统命令的4种方法

    这篇文章主要介绍了Python执行Linux系统命令的4种方法,即在Python脚本中调用Shell命令,需要的朋友可以参考下
    2014-10-10
  • Shell脚本中让进程休眠的方法(sleep用法)

    Shell脚本中让进程休眠的方法(sleep用法)

    这篇文章主要介绍了Shell脚本中让进程休眠的方法,本文讲解的就是sleep的用法,可以实现睡觉若干秒、若干分钟、若干小时,需要的朋友可以参考下
    2014-11-11
  • linux系统下hosts文件详解及配置

    linux系统下hosts文件详解及配置

    hosts文件是Linux系统上一个负责ip地址与域名快速解析的文件,以ascii格式保存在/etc/目录下。这篇文章主要介绍了linux系统下hosts文件详解及配置的相关资料,需要的朋友可以参考下
    2016-10-10
  • Shell脚本中执行sql语句操作mysql的5种方法

    Shell脚本中执行sql语句操作mysql的5种方法

    这篇文章主要介绍了Shell脚本中执行sql语句操作mysql的5种方法,本文讲解了将SQL语句直接嵌入到shell脚本文件中、命令行调用单独的SQL文件、使用管道符调用SQL文件等方法,需要的朋友可以参考下
    2014-10-10
  • 详谈Linux打包与压缩及tar命令

    详谈Linux打包与压缩及tar命令

    下面小编就为大家带来一篇详谈Linux打包与压缩及tar命令。小编觉的挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03

最新评论