shell 整理(27)===大小写字母替换修改文件名

(一)题目:

(1)创建一个文件夹

(2)文件夹里面有10 个以任意字母或数字开头的文件

(3)如果开头第一位数字就不做改变

(4)如果开头第一位字母就改成大写

例如:修改后的结果

[[email protected] hushuai]# ls

06e28fe4  5b1775ab  74d1badf  Cccb27b2  F3619201

3bfaa07c  6bd6b971  C4a1f7d8  Db3308c4  F6403885

[[email protected] hushuai]#



shell 代码如下:

#!/bin/bash

a=`ls hushuai/ |xargs -n1`

echo "$a" |while read line         #这个地方必须加双引号,细节,不加不解析空格

do

b=`echo $line | cut -c1`

c=`echo $line |cut -c2-`

d=`echo $b |grep -c ‘[a-z]‘`    #必须加[],和tr 不一样

if [ $d -eq 1 ];then

e=`echo $b | tr ‘a-z‘ ‘A-Z‘`

mv  hushuai/$b$c  hushuai/$e$c   2>/dev/null

fi                # mv 旧名字 新名字

done

这样写显得没有条理,纷繁复杂,我们可以把判断改成函数,修改结果如下:

#!/bin/bash

swap(){   b=`echo $line | cut -c1`

c=`echo $line |cut -c2-`

d=`echo $b |grep -c ‘[a-z]‘`

}

a=`ls hushuai/ |xargs -n1`

echo "$a" |while read line

do

swap

if [ $d -eq 1 ];then

e=`echo $b | tr ‘a-z‘ ‘A-Z‘`

mv  hushuai/$b$c  hushuai/$e$c   2>/dev/null

fi            #如果说你执行多次脚本,名字第一次已经改过来了

done                    就会报错,我们让错误输出到空



然后我们给这个题目做一下升级

(1)创建一个文件夹

(2)文件夹里面有10以dingxue为开头的任意6-10位随机数组成

(3)把dingxue 的首字母ding 换成任意一个大写字母

(4)把后面的6-10位随机数换成等长度的小写字母

例如:

[[email protected] hushuai]# ls ding/

dingxue87495987  dingxue885527619  dingxue894674790  dingxue908168

dingxue87819699  dingxue8884654    dingxue8974959

dingxue8810688   dingxue89173327   dingxue903851012



shell 代码如下:

#!/bin/bash

#for i in `seq 10`

#do

#        b=$((RANDOM%4+6))     #随机数的应用

#        a=`date +%N`

#        c=`echo $a | cut -c1-$b`

#        touch dingxue$c

#done

a=`ls ding/ |xargs -n1`

echo {A..Z} |xargs -n1>file

d=`cat file | wc -l`

echo "$a" |while read line

do

e=$((RANDOM%$d+1))

 w=`echo $line |awk -F ‘[0-9]‘ ‘{print $1}‘`

  b=`echo $line | cut -c 1`

  f=`cat file | sed -n ‘‘$e‘p‘`

  g=`echo $w |sed ‘s/‘$b‘/‘$f‘/‘` #sed 、awk 引用变量都加个单引号

#echo $g                    具体情况具体定

  h=`echo $line| awk -F‘[a-z]‘ ‘{print $8}‘`

i=`echo $h |tr ‘‘$h‘‘ ‘a-z‘`    #这里也是,一定要注意我的引号

echo $g$i

done

这是我刚开始写的,是不是看上去很乱呢,我们可以把判断部分改成函数,修改结果如下:

shell 代码:

#!/bin/bash

prepare() {

a=`ls ding/ |xargs -n1`

echo {A..Z} |xargs -n1>file

d=`cat file | wc -l`

}

random () {

e=$((RANDOM%$d+1))

}

virable () {

w=`echo $line |awk -F ‘[0-9]‘ ‘{print $1}‘`

b=`echo $line | cut -c 1`

f=`cat file | sed -n ‘‘$e‘p‘`

g=`echo $w |sed ‘s/‘$b‘/‘$f‘/‘`

h=`echo $line| awk -F‘[a-z]‘ ‘{print $8}‘`

i=`echo $h |tr ‘‘$h‘‘ ‘a-z‘`

}

prepare

echo "$a" |while read line

do

random

virable

echo $g$i

done

这样是不是清晰了很多了呢?



本文出自 “IT生活” 博客,谢绝转载!

时间: 2024-11-07 10:44:44

shell 整理(27)===大小写字母替换修改文件名的相关文章

shell整理(29)===判断用户输入可不可以作为变量

(一)题目: 接受一个用户输入,判断这个输入是否可以作为变量 可以作为变量的条件 (1)大小写字母都可以 (2)字母中间可以有数字,但是不能以数字开头 (3)特殊字符除了"_ "其他都不可以作为变量 例如: [[email protected] hushuai]# bash 22.sh Input:1dsf Name is not [[email protected] hushuai]# bash 22.sh Input:=ewr Name is not [[email protect

shell 整理(26)===大小写字母替换和随机取出一个奇数

(一)题目: 接受一个输入,如果是大写字母换成小写字母,小写字母换成大写字母. 例如: [[email protected] hushuai]# bash 4.sh input:dinGXUE DINgxue [[email protected] hushuai]# 方法(1) shell 代码如下: #!/bin/bash read -p "input:" dd echo $dd | tr '[a-z][A-Z]' '[A-Z][a-z]' ~ 方法(2) shell 代码如下: #

shell遍历多个文件夹并进行批量修改文件名

问题:将图片名中的ing_变为0. 当前目录下:$ ls pic,change_name.sh pic/ |__kk1/ |__img_001.jpg |__img_002.jpg |__vv2/ |__img_005.jpg |__abc_002.jpg 解决: 在change_name.sh中写入如下内容: #!/usr/bin/env shcd picDIR=`ls .` for dir in ${DIR};do fi [ -d ${dir}];then cd $dir rename 's

shell 整理(25)=====替换大小写字母

这是我的新浪博客,有我写的所有shell 我在新浪博客里面写了很多自己平时练习用的shell,我以后准备在51上写,上面是超链接. (一)接受一个输入,将输入的字符串的首字母替换掉. 例如 [[email protected] hushuai]# bash 1.sh input word:ding xue Ding Xue [[email protected] hushuai]# shell 代码如下: #!/bin/bash >file1               #每执行一次脚本清空次这个

输入字符串,包含数字,大小写字母,编程输出出现做多的数字的和

题目描述: 输入字符串,包含数字,大小写字母,编程输出出现做多的数字的和. 思路: 1.创建输入对象2.输入字符串3.利用正则将字母分离出,剩余的每一个字符串即为待统计的每一个数字,存入字符串数组中 4.遍历数组,拿到字符串,存入创建的hashMap中,且键为该字符串,值为出现的次数:这里我使用的判断出现几次的技巧是借助hashSet的存储非重复元素的性质,每次拿到数组元素时同时进行存入hashSet的操作(具体代码中会有) 4.此时的hashMap中存储的即为出现的数字及其出现次数的对应键值对

Java中关于大小写字母的转换

方法一: 大小写字母在ascii码表中相减的值为32 故可将字符串转车字符数组 小写转大写减32 大写转小写加32 String s= "good"; char[] c = s.toCharArray; //首字母大写 c[0]-=32; 方法二 String类中的 toLowerCase()将单词所有字母小写 toUpperCase()将单词所有字母大写 substring()截取某个字母并结合以上方法转换

String-需求把一个字符串的首字母转成大写,其余为小写(只考虑英文大小写字母字符)

package cn.lianxi; public class DaXiao { public static void main(String[] args) { /*需求把一个字符串的首字母转成大写,其余为小写(只考虑英文大小写字母字符) * 分析: * 1.先获取第一个字符 * 2.获取除了第一个字符的以外字符 * 3.把第一个字符转成大写 * 4.把第一个字符转成大写 * 5.把除第一个字符以外的字符转成小写 * 6.字符串拼接 * */ String str = "helloWORLD&

js 正则 以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“

js  正则  以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“ var reg = /^[a-zA-Z]{1}(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\[email protected]\.]{6,16}$/; var v = reg.test(str);     alert(v); //校验是否全由数字组成 function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.exec(s)) return fa

validate插件:验证密码没有空格 用户名是5-10位 至少包含数字和大小写字母中的两种字符

//校验密码是否含有空格 jQuery.validator.addMethod("notblank", function(value, element) { var pwdblank = /^\S*$/; return this.optional(element) ||(pwdblank.test(value)); }, "密码不可包含空格"); //用户名必须需包含数字和大小写字母中至少两种 jQuery.validator.addMethod("use