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

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

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

linux shell字符串截取总结相关推荐

  1. Linux Shell字符串截取(非常详细):#左边开始截取、%右边开始截取、指定位置截取

    演示 Shell 截取字符串通常有两种方式:从指定位置开始截取和从指定字符(子字符串)开始截取. 从指定位置开始截取 这种方式需要两个参数:除了指定起始位置,还需要截取长度,才能最终确定要截取的字符串 ...

  2. Linux shell字符串截取与拼接

    快速链接: .

  3. shell字符串截取方法

    shell中截取字符串的方法有很多中, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...

  4. linux shell 字符串操作(长度,查找,替换)详解 BASH

    linux shell 字符串操作(长度,查找,替换)详解 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系 ...

  5. linux shell字符串及字符串长度获取方式

    linux shell字符串及字符串长度获取方式

  6. Shell 字符串截取

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.co ...

  7. 在 Linux shell 字符串中,百分比符号是什么?

    当你正在学习如何完全使用 Linux shell 时,你可以能会觉得自己能够对字符串进行操作. 记住,今天q&一个文章的超级用户对读者的一个奇怪问题有答案. 今天,回答会话的问题来自超级用户的 ...

  8. linux中字符串截取的八种方法

    Linux 的字符串截取很常用,总结常用不同需求的几种方法 假设有变量 var=http://www.aaa.com/123.htm 1. # 号截取,删除左边字符,保留右边字符. echo ${va ...

  9. shell字符串截取

    shell 字符串截取方法 1.从第几个索引开始,截取到最后 2.从第几个索引开始,截取指定长度字符 3.从倒数第几个位置开始,截取到最后 4.从倒数第几个位置开始,截取指定长度字符 5.从左开始匹配 ...

最新文章

  1. AI一分钟 | 谷歌或发布Home Hub;特斯拉数周内五名高管离职
  2. 如何在自定义指令中获取评估属性
  3. 广西梧州举办警察半程马拉松邀请赛 3000多人开跑
  4. NOIP2018洛谷P5021:修建赛道
  5. html语言的字体设置
  6. Java实现非对称加密算法-RSA加解密
  7. centos7修改ip地址命令_每天一条Linux命令(12) hostnam (超详细)
  8. excel显著性检验_数据分析系列 10/32 | Excel方差分析之单因素方差分析
  9. Python机器学习基础教程(一):简介
  10. 图片转文字,手机摇身一变就是万能扫描仪!
  11. CMM与ISO9000
  12. JavaScript留言板效果代码实例
  13. 单片机课设中期报告_毕业论文--中期检查情况报告(40页)详解.doc
  14. shiro原理简介说明
  15. 网狐大联盟服务器环境搭建完整教程
  16. PLC通过DDE通讯——基于Codesys和组态王7.5进行数据采集
  17. 永恒之蓝漏洞复现及上传后门程序
  18. 单片机无线调试-看见心跳-手机显示心率波形
  19. 最大似然估计总结笔记
  20. san mysql,高性能MySQL :应该用SAN吗?

热门文章

  1. 使用Element进行前端开发
  2. 海康视频监控集成方案
  3. MATLAB GUI 停止运行程序,Matlab gui教程0x4-GUI程序打开、运行和发布
  4. 开源版商城源码V2.0【小程序 + H5+ 公众号 + APP】
  5. 特斯拉自动驾驶靠自研芯片,国产智能汽车怎么办?
  6. Softing工业边缘产品的新功能助力工业数据集成到IT解决方案中
  7. pytorch的register_buffer
  8. 对标GPT核心技术RLHF!港科大开源RAFT「木筏」,适用GPT扩散模型
  9. HTTP: 状态码400~415错误说明
  10. 有铅工艺和无铅工艺的区别到底在哪里?