百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

shell——字符串操作

wptr33 2024-12-10 21:19 12 浏览

str="abc123abcABC"

#计算字符串的长度

echo ${#str} #12
expr length $str
expr "$str" : ".*"

查找子串位置

expr index $str "b" #2

得到子字符串

代码:# 方法

[hadoop@localhost d3]$ expr substr "$str" 1 3
abc
[hadoop@localhost d3]$ expr substr "$str" 1 5
abc12
[hadoop@localhost d3]$ expr substr "$str" 2 5
bc123

#==取子串==

# ${string:position}

# ${string:positon:length}

echo ${str:2} #从第2个位置开始提取字符串的值,从0开始,c123abcABC
echo ${str:2:3} #从第2个位置开始提取长度为3个字符的值,c12

#反向提取子串

echo ${str:(-2)} #从反向的第2个位置开始提取字符串,BC
echo ${str:(-2):6} #从反向的第2个字符的位置开始提取长度为6个字符的串,BC
echo ${str:(-6):3} #6个中提出3个总可以了,abc

#=子串替换=

# ${string/substring/replacement}

# 使用$replacement来替换第一个匹配的$substring.

# ${string//substring/replacement}

# 使用$replacement来替换所有匹配的$substring.

#

# ${string/#substring/replacement}

# 如果$substring匹配$string的开头部分,那么就用$replacement来替换$substring.

# ${string/%substring/replacement}

# 如果$substring匹配$string的结尾部分,那么就用$replacement来替换$substring.

#

str1="123abcABCab12"
echo ${str1/12/hover} #仅仅替换了第一个,hover3abcABCab12
echo ${str1//12/hover} #替换了所有的,hover3abcABCabhover
echo ${str1/#12/hover} # 从头开始匹配12,如果找到做替换,hover3abcABCab12
echo ${str1/%12/hover} # 从尾开始匹配12,如果找到做替换,123abcABCabhover

匹配正则表达式

# 打印匹配长度

[hadoop@localhost d3]$ expr match $str "abc"
3
[hadoop@localhost d3]$ expr match $str "abcd"
0
[hadoop@localhost d3]$ expr match $str "abc12"
5

连接

[hadoop@localhost d3]$ echo $str$str1
123456789abc0000

得到字符串中某个字符的重复次数

[hadoop@localhost d3]$ str=11223456789
[hadoop@localhost d3]$ echo $str |tr "x" "\n" |wc -l得到的结果需要减去1
1
[hadoop@localhost d3]$ echo $str |tr "1" "\n" |wc -l
3
[hadoop@localhost d3]$ echo $str |awk -F"1" '{print NF-1}'
2

将一批文件中的所有string替换

for i in file_list
do
vi $i <<-!
:g/xxxx/s//XXXX/g
:wq
!
done

将字符串内每两个字符中间插入一个字符或多个字符

str=11223456789
[hadoop@localhost d3]$ echo $str |sed 's/../&[-]/g'
11[-]22[-]34[-]56[-]78[-]9
[hadoop@localhost d3]$ echo $str |sed 's/../&-/g'
11-22-34-56-78-9

应用字符串截断

该文件是否是一个tar文件。要确定它是否是 tar 文件,将在文件末尾查找模式 ".tar"。如下所示:

mytar.sh -- 一个简单的脚本

#!/bin/bash
if [ "${1##*.}" = "tar" ]
then
echo This is a tar file
else
echo This is not a tar file
fi
$ ./mytar.sh thisfile.tar
This is a tar file
$ ./mytar.sh thatfile.gz
This is not a tar file

"${1##*.}" 将从环境变量"1"包含的字符串开始部分除去最长的 "*." 匹配,并返回结果。这将返回文件中最后一个 "." 之后的所有部分。显然,如果文件以 ".tar" 结束,结果将是 "tar",条件也为真。

[hadoop@localhost d3]$ aa=aa.tar
[hadoop@localhost d3]$ echo ${aa##*.}
tar

2022-9-21

相关推荐

【推荐】一款开源免费、美观实用的后台管理系统模版

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍...

Android架构组件-App架构指南,你还不收藏嘛

本指南适用于那些已经拥有开发Android应用基础知识的开发人员,现在想了解能够开发出更加健壮、优质的应用程序架构。首先需要说明的是:AndroidArchitectureComponents翻...

高德地图经纬度坐标批量拾取(高德地图批量查询经纬度)

使用方法在桌面上新建一个index.txt文件,把下面的代码复制进去保存,再把文件名改成index.html保存,双击运行打开即可...

flutter系列之:UI layout简介(flutter ui设计)

简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。...

Android开发基础入门(一):UI与基础控件

Android基础入门前言:...

iOS的布局体系-流式布局MyFlowLayout

iOS布局体系的概览在我的CSDN博客中的几篇文章分别介绍MyLayout布局体系中的视图从一个方向依次排列的线性布局(MyLinearLayout)、视图层叠且停靠于父布局视图某个位置的框架布局(M...

TDesign企业级开源设计系统越发成熟稳定,支持 Vue3 / 小程序

TDesing发展越来越好了,出了好几套组件库,很成熟稳定了,新项目完全可以考虑使用。...

WinForm实现窗体自适应缩放(winform窗口缩放)

众所周知,...

winform项目——仿QQ即时通讯程序03:搭建登录界面

上两篇文章已经对CIM仿QQ即时通讯项目进行了需求分析和数据库设计。winform项目——仿QQ即时通讯程序01:原理及项目分析...

App自动化测试|原生app元素定位方法

元素定位方法介绍及应用Appium方法定位原生app元素...

61.C# TableLayoutPanel控件(c# tabcontrol)

摘要TableLayoutPanel在网格中排列内容,提供类似于HTML元素的功能。TableLayoutPanel控件允许你将控件放在网格布局中,而无需精确指定每个控件的位置。其单元格...

想要深入学习Android性能优化?看完这篇直接让你一步到位

...

12个python数据处理常用内置函数(python 的内置函数)

在python数据分析中,经常需要对字符串进行各种处理,例如拼接字符串、检索字符串等。下面我将对python中常用的内置字符串操作函数进行介绍。1.计算字符串的长度-len()函数str1='我爱py...

如何用Python程序将几十个PDF文件合并成一个PDF?其实只要这四步

假定你有一个很无聊的任务,需要将几十个PDF文件合并成一个PDF文件。每一个文件都有一个封面作为第一页,但你不希望合并后的文件中重复出现这些封面。即使有许多免费的程序可以合并PDF,很多也只是简单的将...

Python入门知识点总结,Python三大数据类型、数据结构、控制流

Python基础的重要性不言而喻,是每一个入门Python学习者所必备的知识点,作为Python入门,这部分知识点显得很庞杂,内容分支很多,大部分同学在刚刚学习时一头雾水。...