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

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. Javascript模仿C语言的链表实现(增删改查),并且使用控制台输入输出

    Js新手最近在研究Js数据结构,刚好看到链表实现这一块儿,觉得有些资料和自己理解的有冲突,于是借着自己以前一点点C语言的基础,用Javascript模仿了C的链表实现,并且用了process.stdi ...

  2. javascript document对象 第21节

    <html> <head> <title>DOM对象</title> <style type="text/css"> t ...

  3. Library vector Type

    vector的定义 vector是C++标准库里最常用的容器,它之所以被称为容器,是因为它可以存放多个对象,所有在用一个容器中的对象都应该具有相同的类型. vector也是一个类模板,这也是它能存放多 ...

  4. 快速排序 javascript实现

    Quicksort(快速排序) 是由 东尼·霍尔 所发展的一种排序. 它比其他的Ο(n log n)算法更快, 因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来.当然, ...

  5. 24种设计模式--组合模式【Composite Pattern】

    大家在上学的时候应该都学过“数据结构”这门课程吧,还记得其中有一节叫“二叉树”吧,我们上学那会儿这一章节是必考内容,左子树,右子树,什么先序遍历后序遍历什么,重点就是二叉树的的遍历,我还记得当时老师就 ...

  6. 分享一下个人的Vim配置文件

    强烈拥护开源精神,高举开源大旗,今天我就分享下我自己结合网上还有自己实际使用配的vimrc,可以给各位参考下,不要见笑哈,具体说明我在rc里写的也很详细,可以具体看下,也希望可以借这个机会能多认识认识 ...

  7. OpenCV学习目录(持续更新)

    这个暑假开始,需要用到图像处理相关的东西,于是我选择了OpenCV库,这里记录下我的整个学习过程. 参考资料: <OpenCV 2计算机视觉编程手册> 张静 译,科学出版社 1. Linu ...

  8. demo——06弹性和制作骰子

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. c语言数组的操作

    #include<stdio.h> #include<malloc.h> #include<stdlib.h>//exit() struct Arr//定义了一个数 ...

  10. xcopy总是询问是文件名还是目录名

    我需要运行类似xcopy /y a.xml .\pics\b.xml很多次,但xcopy总是问我“文件名还是目录名” 可以这样通过管道来做echo f | xcopy /y a.xml .\pics\ ...