1、基于模式匹配截取字符串

1、#、##号截取

#号截取,从左边开始,以一个出现的分隔符(最左)为准,删除左边字符。

##号截取,从左边开始,以最后(最右)一个分隔符为准,删除左边字符。

str='hello world'
echo ${str#*l}
echo ${str##*l}
echo ${str##*llo}

#*l 表示从左边开始删除第一个出现的w左边的所有字符。##*l 表示从左边开始删除最后一个出现的w左边的所有字符。

2、%、%%号截取

%号截取,从右边开始,以一个出现的分隔符(最右)为准,删除右边字符。

%%号截取,从右边开始,以最后一个出现的分隔符(最左)为准,删除右边字符。

str='hello world'
echo ${str%l*}
echo ${str%%l*}
echo ${str%lo*}

%l* 表示从右边开始删除第一个出现的w右边的所有字符。%%l* 表示从右边开始删除最后一个出现的w右边的所有字符。

2、字符串切片

字符串切片:${var:offset:length}

1、当length为正数

str='hello world'
echo ${str::} #从第0个字符开始,截取7个字符。
echo ${str:} #从左边开始第七个字符,一直到结束。
echo ${str:-:} #从右边开始第七个字符,截取2个字符。
echo ${str:-:} #从右边开始第七个字符,截取3个字符。
echo ${str:-} #从右边开始第七个字符,一直到结束。

2、当length为负数

str='hello world'
echo ${str::-} #从第0个字符开始,一直到倒数第二个字符。
echo ${str:-:-} #从右往作数的第七个字符开始,一直到倒数第二个字符。
echo ${str::-} #从第四个字符开始,一直到倒数第二个字符。
echo ${str: -} #从右边开始(倒数)第二个字符,一直到最后。注意冒号后有空格,等效于${str:0-2}。

3、查找替换字符串

${var/pattern/substi}:查找var所表示的字串中,第一次被Pattern匹配到的字串,并以substi替换之。

${var//patten/substi}:查找var所表示的字串中,所有被Pattern匹配到的字串,并以substi替换之。

${var/#pattern/substi}:以行首锚定的方式将pattern匹配至var所表示的字串上,如果能匹配,则以substi替换之。

${var/%pattern/substi}:以行尾锚定的方式将pattern匹配至var所表示的字串上,如果能匹配,则以substi替换之。
以上均可使用?, *元字符。

str='hello world'
echo ${str/l/e}
echo ${str//l/e}
echo ${str/#l/e}
echo ${str/#hel/e}
echo ${str/%ld/e}
echo ${str/h*o/hi}
echo ${str/h??/eee}

${var/pattern}:替换为空,即删除pattern匹配到的第一次出现。
 ${var//pattern}: 删除pattern匹配到的所有出现。
 ${var/#pattern}
 ${var/%pattern}

使用方法同上。

4、字符串大小写转换

${var^^}:小写-->大写

${var,,}:大写-->小写

str='hello WORLD'
echo ${str^^}
echo $str | tr '[a-z]' '[A-Z]'
echo ${str,,}
echo $str | tr '[A-Z]' '[a-z]'

大小写转换的方式很多,还包括 declare、awk等。

5、变量赋值

有无冒号存在细微差别

1、有冒号

通常用来表示变量是否有值(定义且非空)。

${var:-word}: 如果var为空或未设置,那么返回word;否则,则返回var中的值;

${var:=word}:如果var为空或未设置,那么返回word,并且将word赋值给var;否则,返回var中的值;

${var:?err_info}:如果var为空或未设置,那么返回错误信息;否则,则返回var自身的值;

${var:+word}:如果var自身有正常数据,则返回word;

str='hello world'
echo ${str:-word}
str=''
echo ${str:-word}
echo ${str:=word}
echo $str
echo ${str:?error}
str=''
echo ${str:?error}
echo $? #查看上条命令是否返回错误信息
echo ${str:+word}
str='asdas'
echo ${str:+word}

2、无冒号

若去掉冒号则表示变量为空也视为变量有正常值存在。通常用来表示变量是否定义。

str='hello world'
echo ${str-word}
str=''
echo ${str-word}
echo ${strr-word}
echo $str
echo ${str?error}
echo ${strr?error}
echo $? #查看上条命令是否返回错误信息

Linux终端中的字符串使用总结(截取,切片,查找替换,转换,变量赋值等)的更多相关文章

  1. 如何在 Linux 终端中知道你的公有 IP

    导读 在本文中我将会介绍在几种在 Linux 终端中查看你的公有 IP 地址的方法.这对普通用户来说并无意义,但 Linux 服务器(无GUI或者作为只能使用基本工具的用户登录时)会很有用.无论如何, ...

  2. 在Linux终端中查看公有IP的方法详解

    首先回顾一下一般的查看IP的命令: ifconfigLinux查看IP地址的命令--ifconfigifconfig命令用于查看和更改网络接口的地址和参数 $ifconfig -a  lo0: fla ...

  3. python代码在linux终端中执行报错:Unable to init server: Could not connect: Connection refused

    python代码在linux终端中执行时报错: Unable to init server: Could not connect: Connection refused Unable to init ...

  4. SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换

    SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换 场景一:表单中的日期字符串和JavaBean的Date类型的转换 在使用SpringMVC的时候,经常会遇到表单中的 ...

  5. 在Linux终端中快速生成、解码二维码

    我们要实现两个功能: 解码Linux屏幕上的二维码,将结果输出在终端 在终端中将字符串转为二维码,直接显示二维码在终端中以供扫描 实现方法 生成二维码 qrencode是一个常见的生成二维码的CLI程 ...

  6. 花里胡哨,如何在Linux终端输出带有颜色的字体,将带颜色的字体赋值给变量

    背景 ​ 在日常操作Linux的情况下,总会遇到一些需求,比如说,把输出的内容用不同颜色标注出来,以达到醒目.提示的目的,那么如何在Linux终端输出带有颜色的字体呢? Linux终端输出字符颜色 ​ ...

  7. shell总结:读取文件、参数、if、分割字符串、数组长度、空文件、变量赋值、多进程、按行切割文件、查看线程

    Reference: http://saiyaren.iteye.com/blog/1943207 1.     Shell  读取文件和写文件 for line in $(<top30000. ...

  8. AngularJS中使用$parse或$eval在运行时对Scope变量赋值

    在"AngularJS中自定义有关一个表格的Directive"中自定义了一个有关表格的Direcitve,其表格的表现方式是这样的: <table-helper datas ...

  9. LInux终端中Ctrl+S卡死

    因为初学Linux,在vim中写东西是总是喜欢按Ctrl+s来保存内容导致终端突然卡主,然后上网查资料发现了Ctrl+s 暂停屏幕输出[锁住终端]而对应的按键是Ctrl+q 恢复屏幕输出[解锁终端]

随机推荐

  1. Hadoop安装—— WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platf

    今天在安装hadoop完成测试创建用户目录失败在网上找到了原因记录一下原文地址 http://blog.csdn.net/l1028386804/article/details/51538611 配置 ...

  2. zoj 3822(概率dp)

    ZOJ Problem Set - 3822 Domination Time Limit: 8 Seconds      Memory Limit: 131072 KB      Special Ju ...

  3. Java 类型信息 —— 获取泛型类型的类对象(.class)

    How to get a class instance of generics type T 考虑泛型类Foo<T>,在其成员中,如果想获取类型(type)T的类实例(class inst ...

  4. 就是这个foxmail有时出现记事同步不了

    昨天和妈妈商量还是要打算再次买一块正版电池,虽然她现在有点不情愿,但是过一个月再说,然后就是他的号码超出流量6M,由于是2G的流量,按照每M是一元,所以就是扣了6元,然后他的套餐里面显示还有94M也不 ...

  5. Python实现用户交互,显示省市县三级联动的选择

    题目:Python实现用户交互,显示省市县三级联动的选择 定义的字典为: dic = { "江西": { "萍乡": ["安源", &quo ...

  6. asp.net mvc6学习资料整理

    十分钟轻松让你认识ASP.NET MVC6 http://www.cnblogs.com/n-pei/p/4272105.html ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web ...

  7. codeforces 37 E. Trial for Chief【spfa】

    想象成一层一层的染,所以相邻的两个格子连边,边权同色为0异色为1,然后答案就是某个格子到距离它最远得黑格子的最短距离的最小值 注意特判掉不需要染色的情况 #include<iostream> ...

  8. bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级【分层图+spfa】

    至死不用dijskstra系列2333,洛谷上T了一个点,开了O2才过 基本想法是建立分层图,就是建k+1层原图,然后相邻两层之间把原图的边在上一层的起点与下一层的终点连起来,边权为0,表示免了这条边 ...

  9. oracle-数据库泵EXPDP导出用户下所有

    1登录sys用户 2创建目录 create directory [dirname] as ‘[dirpath]’; dirname:取的名字 dirpath:dmp文件导出路径 示例:create d ...

  10. jsonp 监控简陋代码

    url: window.location.href Agent: navigator.userAgent var tkInfo = { VisitUrl: window.location.href, ...