http://blog.csdn.net/shuanghujushi/article/details/51298672

在bash shell的使用过程中,经常会遇到一些字符串string的操作,下面是个人的一些使用总结。

一、字符串的定义

用双引号,单引号,或者直接在接在=后,都可以定义一个字符串,如下,定义了三个字符串

str1="this is a string"
str2='this is a string'
str3=this_is

但双引号和单引号,在bash中还是有区别的。 
单引号引用,则保留字符串的所有字符的字面含义,同时,单引号内不允许再出现单引号,也不会对转义字符等进行转义。 
双引号引用,则支持一些扩展,如$(美元符) \ (反斜杠)。\$可以引用后面的变量值,\(反斜杠)表示转义。如下:

str="test_sting."
echo "\\$str" #输出结果为:\test_string
echo '\\$str' #输出结果为:\\$str

二、求字符串长度

str="test_string"
echo ${#str} #得到长度9

三、字符串比较

bash shell中的字符串可以进行,大于,小于,等于,判断是否为空,是否有值等操作。在相等的操作中,支持正则匹配。具体语法如下:

操作符 含义 举例
< 小于 [[ "1" < "2" ]] #true ASCII 字母顺序
> 大于 [[ "2" > "1" ]] #true ASCII 字母顺序
== 等于(支持模式匹配) [[ "aa" == "aa" ]] #true
    [[ "aaa" == a* ]] #true 模式匹配模式匹配的时候,不能加双引号
= 等于,与==等价  
=~ 判断字串 [[ "aa" =~ "a" ]] #true
!= 不等于 [[ "a" != "b" ]] #true
-z 是否为空 [[ -z ""]] #true
-n 是否非空 [[ -n "a" ]] #true

bash shell中在比较字符串的时候,一般最好用”(双引号)将值包含起来,避免空格的影响。但在使用d**==(模式匹配)**的时候,则不能使用双引号

四、字符串的截断

可以使用#,##,%,%%等符号进行字符串的截断操作。bash shell的字符串支持四种截断方式,可以截断左边字符或者截断右边字符。 
假设有字符串str

str="This-is-a-test-string"
操作符 含义 举例
# # 号截取,从左边截取掉最短的匹配,保留右边字符。 echo ${str#*-} #得到is-a-test-string
## ##号截取,从左边截取掉最长的匹配,保留右边字符 echo ${str##*-} #得到string
% %截取,从右边截取最短的匹配,保留左边字符 echo ${str%-*} #得到This-is-a-test
%% %%截取,从右边截取最长的匹配,保留左边字符 echo ${str%%-*} #得到This

五、字符串的截取

shell字符串支持任意位置的子串截取。语法为: 
${org_string:pos:length} 截取从pos开始的length长度的子串 
${org_string:pos:-length} 截取从pos开始,截取到距字符串结束的length长度的位置的子串 
${org_string:(-pos):length} 从距离字符串结束的pos位置开始,截取length长度的子串 
${org_string:(-pos):-length} 从距离字符串结束的pos位置开始,截取到距字符串结束的length长度的位置的子串 
${org_string:pos}截取从pos开始到字符串结束 
${org_string:(-pos)}从距离字符串结束的pos位置开始,截取到字符串结束 
具体用法,如下:

org_str="This-is-a-test-test-string"
echo ${org_str:0:4} #得到 This
echo ${org_str:0:-4} #得到 This-is-a-test-test-st
echo ${org_str:(-11):4} #得到 test
echo ${org_str:(-11):-4} #得到 test
echo ${org_str:4} #得到 -is-a-test-test-string
echo ${org_str(-6)} #得到 string

六、字符串的替换

在bash shell的字符串中,可以使用新的字符串替换旧字符串中的子串。 
假设有字符串org_str

org_str="This-is-a-test-test-string"

具体用法,如下表:

表达式 含义 举例
${org_str/sub_str/replace_str} 使用$replace_str的值来替换第一个匹配的$sub_str ${org_str/test/TEST} #得到This-is-a-TEST-test-string
${org_str//sub_str/replace_str} 使用$replace_str的值来替换全部匹配的$sub_str ${org_str//test/TEST} #得到This-is-a-TEST-TEST-string

${org_str/#sub_str/replace_str}

如果$org_str是以$sub_str开始,使用$replace_str的值来替换$sub_str ${org_str/#This/THIS} #得到THIS-is-a-test-test-string
${org_str/%sub_str/replace_str} 如果$org_str是以$sub_str结束,使用$replace_str的值来替换$sub_str

linux shell学习(字符串操作)--01的更多相关文章

  1. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

  2. Linux Shell 截取字符串

    Linux Shell 截取字符串 shell中截取字符串的方法很多 ${var#*/} ${var##*/} ${var%/*} ${var%%/*} ${var:start:len} ${var: ...

  3. Linux shell去除字符串中所有空格

    Linux shell去除字符串中所有空格 echo $VAR | sed 's/ //g'

  4. linux shell 学习笔记--内部命令学习

    .基本命令 新手必须要掌握的初级命令 ls 基本的列出所有文件的命令.但是往往就是因为这个命令太简单,所以我们总是低估它.比如 ,用 -R 选项,这是递归选项,ls 将会以目录树的形式列出所有文件, ...

  5. linux shell学习之shell流程控制

    在linux shell编程中,流程控制结构与语句,也算是shell脚本中的重点了,不了解的朋友,跟随脚本小编一起来学习下吧. linux控制流结构学习. 一,shell控制流结构 1.控制结构   ...

  6. 【转】十分有用的linux shell学习总结

    在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们 数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...

  7. shell脚本—— 字符串操作(长度,查找,替换)

    表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有 ...

  8. Linux shell 学习

    ·详细介绍Linux shell脚本基础学习(一) ·详细介绍Linux shell脚本基础学习(二) ·详细介绍Linux shell脚本基础学习(三) ·详细介绍Linux shell脚本基础学习 ...

  9. Linux shell 获得字符串所在行数及位置

    shell 获得字符串所在行数及位置 01 获取字符串所在的行数 方式一:用grep -n [root@root]# cat test apple bit create delect exe flow ...

随机推荐

  1. opencv3 学习五 - 合并与分割通道

    合并与分割通道 程序如下 #include "opencv2/opencv.hpp" using namespace cv; int main() { Mat original = ...

  2. 小程序开发-11-Promise正确用法与函数签名设计技巧

    配置taBar "tabBar": { "selectedColor": "#000000", "backgroundColor& ...

  3. php+IIS 配置环境(windows环境)

    继php7+apache2.4 配置环境(window环境)后,由于B2C项目准备上线:特此小编在阿里云上搭建PHP7环境,为此特写上搭建过程希望正处于搭建php7+IIS(windows环境)中的朋 ...

  4. 为什么我要放弃javaScript数据结构与算法(第九章)—— 图

    本章中,将学习另外一种非线性数据结构--图.这是学习的最后一种数据结构,后面将学习排序和搜索算法. 第九章 图 图的相关术语 图是网络结构的抽象模型.图是一组由边连接的节点(或顶点).学习图是重要的, ...

  5. Luogu P3120 [USACO15FEB]牛跳房子(金)Cow Hopscotch (Gold)

    题目传送门 这是一道典型的记忆化搜索题. f[x][y]表示以x,y为右下角的方案数. code: #include <cstdio> #define mod 1000000007 usi ...

  6. 【机器学习笔记】EM算法及其应用

    极大似然估计 考虑一个高斯分布\(p(\mathbf{x}\mid{\theta})\),其中\(\theta=(\mu,\Sigma)\).样本集\(X=\{x_1,...,x_N\}\)中每个样本 ...

  7. Java >>>运算符 和 >> 运算符

    >>> 在java 表示有符号右移.什么意思呢?就是最高位符号位也会移动. 我们知道,>>表示有符号右移. -1>> 1 = -1 -1>>2 = ...

  8. Hive窗口函数之LAG、LEAD、FIRST_VALUE、LAST_VALUE的用法

    一.创建表: create table windows_ss ( polno string, eff_date string, userno string ) ROW FORMAT DELIMITED ...

  9. 4、Java并发编程:synchronized

    Java并发编程:synchronized 虽然多线程编程极大地提高了效率,但是也会带来一定的隐患.比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据.今天我们就 ...

  10. golang 仿python pack/unpack

    写得不完善也不完美 尤其是高低位转换那(go和c 二进制高地位相反 需要转换,还有go int转[]byte长度是4位),希望牛人看后指导一下 项目需要通过socket调取 客户端是go ,服务器端是 ...