Shell_Linux Shell 中实现字符串切割的几种方法_shell split string-程序员宅基地

技术标签: Shell_Shell编程  

我们在shell 脚本编程中,经常需要用到字符串切割,即将字符串切割为一个数组,类似java 中的split 函数,下面对几种常见的方式做一个总结。


参考文章:

shell 使用指定的分割符来分割字符串

https://blog.csdn.net/lw305080/article/details/78594011


目录

方法一: 利用shell 中 变量 的字符串替换   

方法二: 设置分隔符,通过 IFS 变量

方法三: 利用tr 指令实现字符替换  (!只能针对单个分隔符)




方法一: 利用shell 中 变量 的字符串替换

原理:

${parameter//pattern/string} 

用string来替换parameter变量中所有匹配的pattern

参考文章: https://blog.csdn.net/u010003835/article/details/80749220

示例:

#!/bin/bash

string="hello,shell,split,test"  
array=(${string//,/ })  

for var in ${array[@]}
do
   echo $var
done 




方法二: 设置分隔符,通过 IFS 变量

原理

自定义IFS变量, 改变分隔符, 对字符串进行切分

参考文章:

https://blog.csdn.net/whuslei/article/details/7187639  

一、IFS 介绍

     Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符。完整定义是The shell uses the value stored in IFS, which is the space, tab, and newline characters by default, to delimit words for the read and set commands, when parsing output from command substitution, and when performing variable substitution.

     Shell 的环境变量分为 set, env 两种,其中 set 变量可以通过 export 工具导入到 env 变量中。其中,set 是显示设置shell变量,仅在本 shell 中有效;env 是显示设置用户环境变量 ,仅在当前会话中有效。换句话说,set 变量里包含了 env 变量,但 set 变量不一定都是 env 变量。这两种变量不同之处在于变量的作用域不同。显然,env 变量的作用域要大些,它可以在 subshell 中使用。

     而 IFS 是一种 set 变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,默认是 space, tab, newline 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量。

二、IFS 简单实例

1、查看变量 IFS 的值。

$ echo $IFS  
  
$ echo "$IFS" | od -b  
0000000 040 011 012 012  
0000004  
直接输出IFS是看不到的,把它转化为二进制就可以看到了,"040"是空格,"011"是Tab,"012"是换行符"\n" 。最后一个 012 是因为 echo 默认是会换行的。


示例

#!/bin/bash

string="hello,shell,split,test"  

#对IFS变量 进行替换处理
OLD_IFS="$IFS"
IFS=","
array=($string)
IFS="$OLD_IFS"

for var in ${array[@]}
do
   echo $var
done


运行结果







方法三: 利用tr 指令实现字符替换

原理

由于只是对单个字符进行的替换,则可以用  echo args |   tr "oldSpilt" "newSpilt"  的方式实现。


tr 指令讲解


背景介绍

tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。

语法
tr(选项)(参数)
选项
  -c或——complerment:取代所有不属于第一字符集的字符;
  -d或——delete:删除所有属于第一字符集的字符;
  -s或--squeeze-repeats:把连续重复的字符以单独一个字符表示;
  -t或--truncate-set1:先删除第一字符集较第二字符集多出的字符。
参数
  字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2”;
  字符集2:指定要转换成的目标字符集。


示例:

#!/bin/bash

string="hello,shell,split,test"  
array=(`echo $string | tr ',' ' '` )  

for var in ${array[@]}
do
   echo $var
done 


shell 使用指定的分割符来分割字符串
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010003835/article/details/80750003

智能推荐

web搭建,dns服务器搭建_dns和web服务器搭建-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏15次。安装Web服务1、www(万维网服务),主要应用于搭建web站点2、中间件,是用承载我们的Web站点,那么什么是中间件(如,iis、apache、nginx、tomcat、jboss等),Web网站没有中间件是不能运行。3、如何安装windows IIS服务器管理器–角色–添加–web服务器–4、web站点的访问方式有三种(1)通过ip访问,一般是有多个公网地址,可以每一个站点分配一个ip(这种情况用的极少)原因:Ip很难记,公网地址需要收费(2)多端口访问,web站点默认是80端口,80_dns和web服务器搭建

Java时间处理工具类TimeUtils_java 时间工具类-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏5次。以上方法笔者觉得没有必要再封装进工具类了,直接调用就行而其他的处理可以参考笔者的时间处理工具类 TimeUtils 的以下方法时间格式转化:转化成时间戳:转化成 LocalDateTimeformat():转化成格式化日期字符串时间获取:获取当前时间戳(精确到毫秒):获取当前的年(仅数值):获取当前的月(仅数值):获取当前的日(仅数值):获取当前的年(格式为 yyyy 的字符串):获取当前的年月(格式为 yyyy-MM 的字符串)_java 时间工具类

WINDOWS2008R2 2012 2016 服务器系统更新补丁打补丁 循环启动 无法进系统恢复解决办法_win2008r2无法进入系统-程序员宅基地

文章浏览阅读3.5k次。可以用如下方法进行急救: 1.PE或者windows光盘启动服务器(记得启动过程中手动加载阵列卡,如果是虚拟化里机器则不用,虚拟化里的课把pe做成iso加载,来启动虚拟化里的机器,我这的是vsphere6.7环境,四台物理服务器做的集群,使用的VSAN).数据库在使用过程中,如遇到突然断电的情况,数据库损坏的机率很大,建议客户实时备份数据。如果确认补丁有问题,在安装了补丁后,系统还未进行重启,可在线进行挂起补丁的移除,然后重启。1.请务必做好备份,备份了数据库,在操作,保证数据绝对安全。_win2008r2无法进入系统

Android:最全面&详细的性能优化攻略(含内存优化、内存泄漏、绘制优化、布局优化、图片优化、APK优化、多线程优化、列表优化等)_安卓项目优化方向-程序员宅基地

文章浏览阅读2.6k次,点赞9次,收藏40次。前言:佛教中有一句话:初学者的心态,拥有初学者心态是件了不起的事情。真正的大师永远怀有一颗学徒的心。一、概述在Android中,性能优化非常重要,因为这决定这一个APP的质量好坏,一个更快更稳更省的app能给用户更优秀的体验。更快:App流畅不卡顿,快速响应;更稳:App稳定运行,程序不崩溃(Crash)和无响应(ANR);更省:节省资..._安卓项目优化方向

window.onresize的详细使用-程序员宅基地

文章浏览阅读6.9k次。window.onresize的详细使用_window.onresize

计算机无法添加打印机,Win7电脑为什么不能添加本地打印机-程序员宅基地

文章浏览阅读1.3k次。对于电脑连接打印机来说是一个非常常见的行为,那么你知道Win7电脑为什么不能添加本地打印机吗,为此系统屋为你带来一个详细的Win7电脑不能添加本地打印机解决方法,从而让你轻松的进行一个连接打印机使用!Win7电脑不能添加本地打印机解决方法1、按下“Win+R”组合键呼出运行,在框中输入法“services.msc”按下回车键打开“服务”界面;2、在服务窗口检查:server、print spool..._win7打印机不能添加本地打印机怎么办

随便推点

服务器基础配置:浪潮服务器配置ILO地址、修改管理员密码、查看虚拟化是否打开:_浪潮服务器修改管理口密码-程序员宅基地

文章浏览阅读1w次。使用场景:因为在公司机房中的服务器我们在使用需要对他做一些类似于初始化的配置,分别是三个,——》第一个是配置服务器的ILO地址,这个是我们通过网络打开一个Web页面对服务器进行一些操作;——》第二个是对管理用户的密码进行修改,这个是因为不同的服务器初始的管理员的密码也许是不一样的,我们将其修改为统一的方便记忆也方便管理;——》第三个就是开启服务器的半虚拟化功能,这个是我们的公司的也许需要服..._浪潮服务器修改管理口密码

php如果字符串有1 3 5,PHP常用字符串函数小结-程序员宅基地

文章浏览阅读87次。PHP常用字符串函数小结来源:程序员人生 发布时间:2015-01-22 09:02:32 阅读次数:1594次1、判断类型的函数is_bool() //判断是不是为布尔型is_float() //判断是不是为浮点型is_real() //同上is_int() //判断是不是为整型is_integer() //同上is_string() ..._php 字符串1-5位

matlab从flove,Matlab玩出新高度,变身表白女友神器_善良995的博客-程序员宅基地-程序员宅基地

文章浏览阅读431次。原文作者:善良995原文标题:Matlab玩出新高度,变身表白女友神器发布时间:2021-03-19 13:36:02Matlab还可以这样玩儿?每逢节日愁哭程序员,不知道该送什么给女朋友,在这里教你用Matlab玩儿出属于程序员的浪漫,送给她一整天的惊喜^^一、效果图先来看看效果图:怎么样,这礼物是不是很用心?是不是很特别?是不是很程序猿?(斜眼笑~)二、完整模板代码当然,我怎么忍心让好男孩们千..._clc clear [x,y,z] = meshgrid(linspace(-3,3,101)); f = -x.^2.*z.^3-(9/80)

字符数组和字符串指针在内存中存储_使用字符串指针定义的变量储存在内存中的-程序员宅基地

文章浏览阅读5.5k次,点赞2次,收藏4次。#include#includechar* strcpy1(){ char *p = "hello kitty"; printf("%s\n", p); return p;}int main(){ printf("%s", strcpy1()); return 0;}字符串在内存中存储在只读数据段,当定义一个字符串指针时,该指针指向这个只读区域,即使在函数中将这个指针返回_使用字符串指针定义的变量储存在内存中的

ubuntu18.04下mysql必须要sudo权限才能打开_在ubuntu中mysql登录时为什么要加sudo-程序员宅基地

文章浏览阅读4.1k次,点赞5次,收藏21次。问题:ubuntu18.04下mysql必须要sudo权限才能打开解决办法:通常是 因为,用户的密码加密方式 不正确导致的。1、sudo mysql -u root -p2、use mysql;3、update user set plugin = 'mysql_native_password';4、flush privileges;5、mysql -u root -p,输入密码登录成功..._在ubuntu中mysql登录时为什么要加sudo

【前端】IIS部署前端_iis服务器怎么部署前端项目-程序员宅基地

文章浏览阅读678次。3.双击“Application Request Routing”,在右侧操作中点击“Proxy”中的“Server Proxy Settings...”,然后将“Enable proxy”打上勾即可。3.找到“internet information services”和“可承载的web核心”,勾选全部,然后点击确定,等待安装。1. 右击“网站”后,点击“添加网站” ,选择打包后的web应用,更据需要配置端口号。4. 安装完成后,在任务栏搜素“IIS”打开。),下载完成后如下。_iis服务器怎么部署前端项目

推荐文章

热门文章

相关标签