一条命令搞定
1.批量修改文件名
1.1 增加内容
有多个sh文件,现在用一条命令做以下修改
# 修改前
1.sh 2.sh 3.sh
# 修改后
1_hehe.sh 2_hehe.sh 3_hehe.sh
使用sed分组功能
ls *.sh|sed -nr 's#((.*)\.sh)#mv \1 \2_hehe.sh#gp' | bash
将命令拆解一下
# sed替换中最外边的括号是匹配整个文件名的,即上边命令中的 \1
$ ls *.sh|sed -r 's#((.*)\.sh)#\1#g'
1.sh
2.sh
3.sh
# 里边的括号是匹配文件名中的数字,即上边命令中的 \2
$ ls *.sh|sed -r 's#((.*)\.sh)#\2#g'
1
2
3
# 有了分组,再配合mv命令拼接
$ ls *.sh|sed -nr 's#((.*)\.sh)#mv \1 \2_hehe.sh#gp'
mv 1.sh 1_hehe.sh
mv 2.sh 2_hehe.sh
mv 3.sh 3_hehe.sh
# 最后通过管道执行bash使命令生效
$ ls *.sh|sed -nr 's#((.*)\.sh)#mv \1 \2_hehe.sh#gp' | bash
$ ls
1_hehe.sh 2_hehe.sh 3_hehe.sh
1.2 删除内容
有多个sh文件,现在用一条命令做以下修改
# 修改前
abc_html_01.jpg abc_html_02.jpg abc_html_03.jpg
# 修改后
abc_01.jpg abc_02.jpg abc_03.jpg
方法一:使用sed分组功能
ls *.jpg | sed -r 's#(.*_)(.*_)(.*)#mv \1\2\3 \1\3#g' |bash
将命令拆解一下
# 根据文件内容匹配成3组,第1组匹配的内容
$ ls *.jpg | sed -r 's#(.*_)(.*_)(.*)#\1#g'
abc_
abc_
abc_
# 根据文件内容匹配成3组,第2组匹配的内容
$ ls *.jpg | sed -r 's#(.*_)(.*_)(.*)#\2#g'
html_
html_
html_
# 根据文件内容匹配成3组,第3组匹配的内容
$ ls *.jpg | sed -r 's#(.*_)(.*_)(.*)#\3#g'
01.jpg
02.jpg
03.jpg
# 有了分组,再配合mv命令拼接
$ ls *.jpg | sed -r 's#(.*_)(.*_)(.*)#mv \1\2\3 \1\3#g'
mv abc_html_01.jpg abc_01.jpg
mv abc_html_02.jpg abc_02.jpg
mv abc_html_03.jpg abc_03.jpg
# 最后通过管道执行bash使命令生 效
$ ls *.jpg | sed -r 's#(.*_)(.*_)(.*)#mv \1\2\3 \1\3#g' | bash
$ ls
abc_01.jpg abc_02.jpg abc_03.jpg