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

参考文章:

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

目录

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

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

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

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

原理:

${parameter//pattern/string}

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

示例:

#!/bin/bash

string="hello,shell,split,test"

array=(${string//,/ })

for var in ${array[@]}

do

echo $var

done

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

原理

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

参考文章:

一、IFS 介绍

Shell 脚本中有个变量叫IFS(Internal Field Seprator) ,内部域分隔符。完整定义是The shell uses the value stored in IFS, which is thespace, 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 使用指定的分割符来分割字符串

linux中特殊符号分割,Shell_Linux Shell 中实现字符串切割的几种方法相关推荐

  1. Shell脚本中计算字符串长度的5种方法

    这篇文章主要介绍了Shell脚本中计算字符串长度的5种方法,来自于个人Shell脚本长期的开发经验,需要的朋友可以参考下 有时在Linux操作系统中需要计算某个字符串的长度,通过查询资料整理了下目前S ...

  2. (转)Shell中获取字符串长度的七种方法

    Shell中获取字符串长度的七种方法 原文:http://blog.csdn.net/jerry_1126/article/details/51835119 求字符串操作在shell脚本中很常用,下面 ...

  3. C# 中对象与JSON字符串相互转换的三种方法

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 关于内存对象和JSON字符串的相互转换,在实际项目中应比较广泛,经过一番搜索,找到如下 ...

  4. 在Python中查找子字符串索引的5种方法

    在Python中查找字符串中子字符串索引的5种方法 (5 Ways to Find the Index of a Substring in Strings in Python) str.find() ...

  5. VS开发中的代码编写小技巧——避免重复代码编写的几种方法

    原文:VS开发中的代码编写小技巧--避免重复代码编写的几种方法 上一篇文章中程序员的幸福生活--有你的日子,每天都是情人节,收到了大家的很多好评.鼓励和祝福,非常感动,真诚的谢谢大家.也希望每个朋友都 ...

  6. mysql中逗号前的字符串_MySql逗号拼接字符串查询的两种方法

    下面两个函数的使用和FIND_IN_SET一样,使用时只需要把FIND_IN_SET换成FIND_PART_IN_SET或FIND_ALL_PART_IN_SET 例如某字段里是为1,2,3,4,5 ...

  7. shell脚本字符串截取的8种方法

    shell脚本字符串截取的8种方法 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. 1 echo ${var#*//} 其中 ...

  8. linux临时配置mac地址,Linux获取网卡型号、mac地址、修改IP地址的几种方法

    1.获取所有有(无)网卡型号 方法一.ifconfig 用法:ifconfig | grep | cut -d ':' -f 1 ubuntu root@ubuntu:~# ifconfig | gr ...

  9. python判断linux中文件是否存在_linux shell 中判断文件、目录是否存在的方法

    本文主要介绍了linux shell 中判断文件.目录是否存在的方法,分享给大家 -e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为 ...

最新文章

  1. 强烈推荐Oracle的入门心得
  2. PagerHelper-分页类
  3. 栈应用_计算按运算符优先级分布的算式(代码、分析、汇编)
  4. 何为父组件子组件、props作用、slot插槽
  5. Beetl学习总结(3)——高级功能
  6. 最新37网游JS逆向分析
  7. 详解JavaScript数组过滤相同元素的5种方法
  8. Python学习笔记(未完)
  9. php多次登录失败,PHPCMS登录后台失败次数过多解决办法
  10. Zookeeeper开源客户端curator watcherAPI的使用
  11. c语言定时器实验程序,89C51单片机实验三 定时器实验
  12. 教大家一个可以用迅雷全速下载百度网盘文件的方法
  13. 免费的XMind思维脑图在线编辑的网站, 可打开 .pos 文件
  14. SCADA系统资料整理-概论
  15. mac php7.2,MAC下更新自带的PHP版本到7.2
  16. 混合牛奶AcWing
  17. CSS3新增特性:选择器、盒子模型、其他属性
  18. 言简意赅说明强类型语言、弱类型语言、动态语言、静态语言
  19. pycharm使用记录
  20. Docker搭建nextcloud使用云盘

热门文章

  1. linux mysql恢复数据_删库不跑路详解MySQL数据恢复
  2. jdbc驱动类加载直接指定线程上下文加载器加载
  3. 1从控制台输入年份,判断是闰年还是平年;
  4. Java 文件高效写入方法
  5. Java List和Array之间的转换
  6. 年终感想——财务自由的程序员,你见过吗?
  7. Git之同一台电脑如何连接多个远程仓库
  8. 人人都能够做深度学习应用:入门篇
  9. 将Java项目从maven迁移到gradle
  10. 物以类聚:对象也有生命