字符串截取
先来了解一下shell字符串相关操作的变量
# 从开头删除匹配最短
## 从开头删除匹配最长
% 从结尾削除匹配最短
%% 从结尾删除匹配最长#指定字符内容截取
a*c 匹配开头为a,中间任意个字符,结尾为c的字符串
a*C 匹配开头为a,中间任意个字符,结尾为C的字符串#语法
name“yangchao” # 该变量的值,有索引,分别是从0,1,2,3,4开始
$(变量) 返回变量值
$(#name) 返回变量长度,字符长度-
$(变量:start) 返回变量start数值之后的学符,且包含start的数字
$(变量:start:length) 提取start之后的length限制的字符,例如$(name:4:1)
$(变量#word) 从变量开头删除最短匹配的word子串$(name:yan)
$(变量##word) 从变量开头,删除最长匹配的word
$(变量%word) 从变量结尾刷除最短的word
$(变量%%word) 从变量结尾开始制除最长匹配的word替换
$(变量/pattern/string) 用string代替第一个配的pattern
$(变量//pattern/string) 用string代替所有的pattern
实战:现有9个文件,批量修改文件名,将文件名中的test删除
[root@linux test]# touch name-{1..9}-test.txt
[root@linux test]# ll
total 0
-rw-r--r--. 1 root root 0 May 26 18:42 name-1-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-2-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-3-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-4-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-5-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-6-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-7-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-8-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-9-test.txt
[root@linux test]#
思路:
1.单个文件怎么去除? 使用mv命令直接修改[root@linux test]# mv name-1-test.txt name-1.txt
[root@linux test]# ll
total 0
-rw-r--r--. 1 root root 0 May 26 18:42 name-1.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-2-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-3-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-4-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-5-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-6-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-7-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-8-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-9-test.txt
[root@linux test]#2.利用变量的子串功能,去掉字符信息[root@linux test]# filename=name-2-test.txt
[root@linux test]# echo $filename
name-2-test.txt
[root@linux test]# echo ${filename}
name-2-test.txt
[root@linux test]# echo ${filename//-test/}
name-2.txt #可以得到最中的文件名,然后配合mv命令进行修改,如第3步
[root@linux test]#3.利用反引号功能,修改单个文件名
[root@linux test]# echo ${filename//-test/}
name-2.txt
[root@linux test]# mv ${filename} `echo ${filename//-test/}`
[root@linux test]# ll
total 0
-rw-r--r--. 1 root root 0 May 26 18:42 name-1.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-2.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-3-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-4-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-5-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-6-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-7-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-8-test.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-9-test.txt
[root@linux test]#4.使用循环批量修改[root@linux test]# #设置循环变量
[root@linux test]# ls *-test.txt
name-3-test.txt name-4-test.txt name-5-test.txt name-6-test.txt name-7-test.txt name-8-test.txt name-9-test.txt
[root@linux test]# echo `ls *-test.txt`
name-3-test.txt name-4-test.txt name-5-test.txt name-6-test.txt name-7-test.txt name-8-test.txt name-9-test.txt
[root@linux test]# for filename in `ls *-test.txt` ;do echo $filename;done
name-3-test.txt
name-4-test.txt
name-5-test.txt
name-6-test.txt
name-7-test.txt
name-8-test.txt
name-9-test.txt
[root@linux test]# for filename in `ls *-test.txt` ;do mv $filename `echo ${filename//-test/}`;done
[root@linux test]# ll
total 0
-rw-r--r--. 1 root root 0 May 26 18:42 name-1.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-2.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-3.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-4.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-5.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-6.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-7.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-8.txt
-rw-r--r--. 1 root root 0 May 26 18:42 name-9.txt
[root@linux test]#
日常学习总结,共勉
结尾彩蛋
- 附件为typora自定义格式文件,效果如下: