Linux shell上的一些命令问题

要将很多目录下的文件中的pubInitXxxx()替换成init_xxxx(),第一个X为大写的要改成小写的,这个X为任意字母,写了这个shell脚本。有些地方看不懂,希望有人给写个注释,比如说`echo ${minold#*t}`这个什么意思。
cat $1 | while read line
do
echo $line | grep -q "pubInit"
if [ $? -eq 0 ]; then
old=`echo $line | sed -n '/pubInit/,/(/p'`
minold=`echo $line | sed -n '/pubInit/,/(/p' | sed 'y/ABCDEFGHIJKLMNOPQR
STUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
mintab=`echo ${minold#*t}`
echo $old | sed s/$old/init_${mintab}/ >> $1.tmp
continue
else
echo "$line" >> $1.tmp
fi
done
mv -f $1.tmp $1

注解了一下:

cat $1 | while  read line   #打印输入的第一个命令行参数文件,输出到管道读取每一行
do  #对每一行处理
    echo $line | grep -q "pubInit"  #如果这一行能够匹配pubInit,grep -q表示匹配也不输出东西
    if [ $? -eq 0 ]; then #如果上个进程退出返回0,应该是匹配了pubInit
        old=`echo $line | sed -n '/pubInit/,/(/p'` #如果这行匹配pubInit和括号就赋值给old
        minold=`echo $line | sed -n '/pubInit/,/(/p' | sed 'y/ABCDEFGHIJKLMNOPQR 
STUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` # 如果这行符合pubInit和括号就将大写字母转为小写赋值给 minold
        mintab=`echo ${minold#*t}` #删除 minold中的*t
        echo $old | sed s/$old/init_${mintab}/ >> $1.tmp #old替换为init_连上${mintab} 并且输出给临时文件
        continue #继续下一行
    else #不匹配
        echo "$line" >> $1.tmp #直接输出到文件
    fi
done
    mv -f $1.tmp $1 #将临时文件改名

追问

在网上找shell的一些命令都很杂,有没有资料给一份?或者给一个学习shell的链接?回答就给分了

追答

不知道怎么发给你。

电驴上下载一本

中文版[LINUX.SHELL编程从初学到精通].伍之昂.扫描版.pdf 。

simplecd.me可以找到资源

书的内容系统一些

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-14
${minold#*t} 这是shell的变量替换
这么写虽然可以,不过有点麻烦 这种替换单用sed就可以了
sed -i.old "s/pubInit\([a-zA-Z]*\)/init_\l\1/g" file追问

`echo ${minold#*t}`这个什么意思??

有没有关于shell的资料有的话给我发一份呗
7648+34358发了就给分

相似回答