# 定义几个变量用于测试目的

FILE_NAME="/usr/local/app/world.txt"
TIME_NOW="`date +"%Y%m%d%H%M%S"`"

1. 取字符串的子串, 比如说从TIME_NOW分别取出日期和时间

DATE_TODAY="${TIME_NOW:0:8}"    # ${var:beg_pos:sub_str_length}, beg_pos是子串的起始位置(从0开始), sub_str_length为子串长度
TIME_TODAY="${TIME_NOW:8:6}"
# 或者
TIME_TODAY="${TIME_NOW:8}" # sub_str_length为0表示到源字符串的结尾
# 取FILE_NAME中的文件名world.txt(不包括路径), 很多童鞋会马上想到basename, 或者一些类似于正则匹配的操作
${FILE_NAME##*/} # 相当于basename ${FILE_NAME},即删除按从左至右,匹配一直到最后一个/之间的子串
${FILE_NAME%/*} # 相当与dirname, 即删除按从右至左方向开始,匹配到第一个/之间的子串
${FILE_NAME#*/} # 从左至右, 删除第一个/及左边的子串
${FILE_NAME%%/*} # 从右至左, 删除至最后一个/及右边的子串

2. 字符串替换

${FILE_NAME/world.txt/hello.txt}    # 把第一个world.txt替换成hello.txt
${FILE_NAME//a/A} # 把所有的a替换成A
%x=abcdabcd
%echo ${x/a/b} # 只替换一个
bbcdabcd
%echo ${x//a/b} # 替换所有
bbcdbbcd

3. 计算字符串长度

${#FILE_NAME}                   # 计算FILE_NAME的长度
ARRAY=(abc defg hijklmn)
${#ARRAY} # 计算这个数组的维数
${#ARRAY[2]} # 计算这个数组第三个元素的长度

4.basename是最常用的,除此之外,Bash中还有个用字符串处理的方法(适用于bash):

for i in /var/html/*
do
echo $i #全路径名
echo ${i##*/} #文件名
done

#表示去除从指定字符向前所有的字符;##表示最大匹配。

%表示去除从指定字符向后所有的字符;%%表示最大匹配。

单个的表示最小匹配,双个表示最大匹配。

也就是说,当匹配的有多种方案的时候,选择匹配的最大长度还是最小长度。

str="abbc,def,ghi,abcjkl"
echo ${str#a*c} # 输出,def,ghi,abcjkl 一个井号(#) 表示从左边截取掉最短的匹配 (这里把abbc字串去掉)
echo ${str##a*c} # 输出jkl, 两个井号(##) 表示从左边截取掉最长的匹配 (这里把abbc,def,ghi,abc字串去掉)
echo ${str#"a*c"} # 输出abbc,def,ghi,abcjkl 因为str中没有"a*c"子串
echo ${str##"a*c"} # 输出abbc,def,ghi,abcjkl 同理
echo ${str#*a*c*} # 空
echo ${str##*a*c*} # 空
echo ${str#d*f) # 输出abbc,def,ghi,abcjkl,
echo ${str#*d*f} # 输出,ghi,abcjkl echo ${str%a*l} # abbc,def,ghi 一个百分号(%)表示从右边截取最短的匹配
echo ${str%%b*l} # a 两个百分号表示(%%)表示从右边截取最长的匹配
echo ${str%a*c} # abbc,def,ghi,abcjkl

可以这样记忆, 井号(#)通常用于表示一个数字,它是放在前面的;百分号(%)卸载数字的后面; 或者这样记忆,在键盘布局中,井号(#)总是位于百分号(%)的左边(即前面)

5.去掉扩展名,匹配语句

for i in /var/html/*
do
echo $i #全路径名
filename=${i##*/} #带扩展名的文件名,用basename也可以
echo ${filename%.*} #去除扩展名的文件名
done

或者用sed的正则替换命令:

for i in /var/html/*
do
echo $i #全路径名
echo $i|sed -r 's#.*/(.*)\..*#\1#' #去除扩展名的文件名
done

或者用awk:

for i in /var/html/*
do
echo $i #全路径名
echo $i|awk -F"[/.]" '{print $(NF-1)}' #去除扩展名的文件名
done

Bash字符串的处理的更多相关文章

  1. bash 字符串处理

    bash 字符串处理 字符串切片:${var:offset:length}示例:[root@localhost ~]#mypath="/etc/sysconfig/network-scrip ...

  2. bash字符串操作

    参考 http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html 问题:bash怎么提取字符串的最后一位?例如python中strin ...

  3. bash字符串前导美元符号的作用

    problem bash内置变量IFS作为内部单词分隔符,其默认值为<space><tab><newline>, 我想设置它仅为\n,于是: OLD_IFS=$IF ...

  4. Bash 字符串处理命令

    字符串长度 str="abc" echo ${#str} 查找子串的位置 str="abc" str1=`expr index $str "a&quo ...

  5. bash:字符串变量查找

    提供了替换文本的查找替换功能,如 sed s/Wintel/Linux/g data (将Wintel替换为Linux)  大命令 下边是基于变量的小命令: 1)查找与替换 ${data/Wintel ...

  6. bash字符串处理

    将movie目录下的文件名写到markdown文件中 , 再转html rm index.md ; for f in `find . *.* | sort`; do [ -f $f ] &&a ...

  7. Bash 脚本编程语言中的美学与哲学

    我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨 Bash 脚本语言中的美学与哲学. 这不是一篇 Bash 脚本编程的教程,但是却能让人更加深入地了解 Bash ...

  8. push or get File or Folder using scp wrapped with expect and bash

    经常需要把服务器的某些文件传到 Mac,或者获取 Mac 的一些文件到服务器.尽管有很多命令scp, ftp, rsync都可以,霸特每次都有敲好长的命令,好烦,而且还要输入密码.所以想着 wrap ...

  9. Linux应用环境实战10:Bash脚本编程语言中的美学与哲学(转)

    阅读目录 一.一切皆是字符串 二.引用和元字符 三.字符串从哪里来.到哪里去 四.再加上一点点的定义,就可以推导出整个Bash脚本语言的语法了 五.输入输出重定向 六.Bash脚本语言的美学:大道至简 ...

随机推荐

  1. WPF动画之关键帧动画(2)

    XAML代码: <Window x:Class="关键帧动画.MainWindow" xmlns="http://schemas.microsoft.com/win ...

  2. OpenCV(6)-腐蚀和膨胀

    腐蚀和膨胀属于形态学操作. 腐蚀和膨胀 腐蚀是指:将卷积核B滑过图像A,找出卷积核区域内最小像素值作为锚点像素值.这一操作可以扩大低像素值区域. 膨胀是指:将卷积核B滑过图像A,找出卷积核区域内最大像 ...

  3. ubuntu zendDebugger.so 加载不上的问题

    参考文章   http://blog.sina.com.cn/s/blog_6612d5810101dapf.html 装zenDdebugger是为了在eclipse中调试用!!!!!!!结果搞了半 ...

  4. CSS3鼠标移入移出图片生成随机动画

    今天分享使用html+css3+少量jquery实现鼠标移入移出图片生成随机动画,我们先看最终效果图(截图为静态效果,做出来可是动态的哟) 左右旋转 上下移动 缩放 由于时间关系我就不一步步解析各段代 ...

  5. 已经安装php后,再增加扩展模块(不重新编辑php)

    下面以安装curl为例,介绍具体安装步骤. 1.安装crul wget http://curl.haxx.se/download/curl-7.19.6.tar.gz tar -zxvf curl-7 ...

  6. [转]left join,right join,inner join区别

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...

  7. sql性能优化总结(转)

    网上看到一篇sql优化的文章,整理了一下,发现很不错,虽然知道其中的部分,但是没有这么全面的总结分析过…… 一.   目的 数据库参数进行优化所获得的性能提升全部加起来只占数据库应用系统性能提升的40 ...

  8. 移动App双周版本迭代实战--转载备用

    对于移动互联网产品来说,迭代的速度就是生命.我创业时做移动App时是一周一版,而现在是2周1版.相比起小公司,大公司迭代时间虽长,却更为不易,因为大公司流程更多,参与人数更多,需求更多,实现这样的快速 ...

  9. Python的数字类型及其技巧

    Python中的数字类型 int float fractions.Fraction decimal.Decimal 数字的舍与入 int(f):舍去小数部分,只保留整数部分,所以int(-3.8)的结 ...

  10. bzoj 2251: [2010Beijing Wc]外星联络 后缀数组

    2251: [2010Beijing Wc]外星联络 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 424  Solved: 232[Submit][ ...