四时宝库

程序员的知识宝库

shell命令: 实用的字符串切割方式

写shell脚本的时候,经常会遇到字符串切割的情况。

除了常用的grep -o, sed, awk, cut之外,还有一种依靠变量本身切割的方式,特别适合掐头去尾的场景。

例如:

有个文件名为“abc-dd.123.log“

file="abc-dd.123.log"

  • 如果想去掉 ".log",只保留“abc-dd.123”,我们可以这样:

echo ${file%.*}

  • 如果只保留“abc-dd”,可以这样:

echo ${file%%.*}

  • 如果只保留“log”, 可以这样:

echo ${file##*.}

  • 如果只保留“dd.123.log”,可以这样:

echo ${file#*-}


使用公式:

${<变量名>[%|%%|#|##]<正则表达式>}

其中,重点是“正则表达式”,匹配的是要删掉的部分

%

从后往前最短匹配

%%

从后往前最长匹配

#

从前往后最短匹配

##

从前往后最长匹配

所以,上面的几个例子,可以用文字描述为

${file%.*} 从后往前,删掉第一个"."以及它之后的字符

匹配结果: abc-dd.123.log

${file%%.*} 从后往前,删掉最后一个“.”以及它之后的字符

匹配结果: abc-dd.123.log

${file##*.} 从前往后,删掉最后一个"."以及它之前的字符

匹配结果: abc-dd.123.log

${file#*-} 从前往后,删掉第一个"-"以及它之前的字符

匹配结果: abc-dd.123.log

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接