for name in /home/philochan/mydata/label/*
do
filename=$(echo $name | grep 'L')
if [ "$filename" != "" ]; then
news=$(echo $filename | sed 's/^.*image//g' | sed 's/_L.*$/.png/g')
echo image$news
echo $filename
mv $filename /home/philochan/mydata/label/image$news
fi
done
注意:
设置变量时一定不要有空白,比如filename = $(echo $name | grep 'L')是不符合shell语法的
最关键的一条语句还是news=$(echo $filename | sed 's/^.*image//g' | sed 's/_L.*$/.png/g'),这里用到了sed这个管道命令,它可以将数据进行替换、删除、新增等功能,这里用到的是部分数据的查找并替换功能(以行为单位):
sed 's/要被替换的字符串/新的字符串/g'
.*是一个常用的正则表达式RE,表示任意字符(.表示任意一个字符,*表示重复字符)
grep -n 'g.*g' test.txt 得到含有g...g这个模式的行
^为行首字符,$为行尾字符
grep -n '^[a-z]' test.txt 得到开头是小写字符的那行