
除了用外部的命令比如expr、awk、sed等等,内置方法可以用截取、替换等方式得到一个新的字符串,如果新的字符串和原来的字符串有变化,说明变量包含字符串。
用替换为例:查找变量a【值复制为hello world】中是否有 字符串or
截取、替换的方法如下:
${string#substring} 从变量$string的开头, 删除最短匹配$substring的子串
${string##substring} 从变量$string的开头, 删除最长匹配$substring的子串
${string%substring} 从变量$string的结尾, 删除最短匹配$substring的子串
${string%%substring} 从变量$string的结尾, 删除最长匹配$substring的子串
${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring
${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring
${string/#substring/replacement} 如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
${string/%substring/replacement} 如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
批量在文件名前面添加前缀的方法
第1,打开电脑上已经安装好的优速文件批量重命名,如下图所示点击【添加文件】或【添加目录】按钮,将需要加前缀的文件全部导入到软件中,进入下一步 *** 作。
第2,然后进行设置,命名方式选择“插入”;插入类型选择“自定义内容”;插入内容右边输入前缀文字内容;插入位置选择“文件名头”。可以一边设置一边在右边预览新文件的名称,方便我们使用。
第3,新文件名预览没问题后说明设置完成了,然后点击右上角的按钮,启动批量重命名程序。当d出成功的提示时说明文件名全部成功添加了前缀。
第4,通过小编的案例可以看到,所有文件名称的前面都添加了统一的前缀字符,批量处理成功。
修改文件名可以有不同的命令方式,比如rename, mv都可以实现对于单个的文件,可以直接使用以上的命令,那如果有大量的类似格式的文件名需要修改成其他格式的,该如何呢?
比如某次测试后,保存的文件为 Lan1.txt, Lan2.txt,....Lan100.txt
这一百个文件需要在前面添加前缀变成类似 ch7_Lan1.txt,如果你还想使用mv来一个一个...多痛苦啊
当前文件夹下,文件修改有4种方式
1. 使用while Loop加 ${//}来实现Lan到 ch7_Lan的替换
点击(此处)折叠或打开
find . -name "Lan*txt" -type f | read files
do
new=${files/Lan/ch7_Lan}
mv $files $new
done
2. 充分利用 awk的分隔符功能来实现
点击(此处)折叠或打开
ls *Lan* | awk 'BEGIN{FS="Lan"OFS="ch7_Lan"}{printf "mv "$0" "$1=$1print $0}' | sh
首先,修改 FS和 OFS,输入和输出的分隔符
其次,使用 awk中的命令,拼接 “mv Lan1.txt ch7_Lan1.txt”这条命令
最后,使用|sh来执行一个 shell命令来完成 mv动作
其中,$1=$1是必须的,这个是完成 Lan===>ch7_Lan的关键(其实是可以使用 $2=$2等来替换,只要一个赋值动作而已)
奇怪的是,难道没有赋值动作,分隔符的改变就不能检测出来么??
3. 使用 awk的内置命令,gsub和 system来实现替换和命令执行
点击(此处)折叠或打开
ls "*Lan*" | awk '{org=$0gsub("Lan", "ch7_Lan")system("mv "org" "$1)}'
首先保存原始的数据
其次修改 Lan为 ch_Lan
最后执行mv动作
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)