好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Shell脚本第四篇 - Linux操作系统:Ubuntu_Centos_Debi

Shell脚本第四篇

 

# 文件校验

md5sum filename

 

# 按数组排序

sort -n filename.txt

 

# 按逆序排序

sort -r file.txt

 

# 按月份排序

 

sort -M file.txt  

 

# 按月份排序( 按照一月,二月,三月,这样的顺序排序 )

 

# 判断一个文件是否已经排序

#!bin/bash

# filename

sort -C file;

if [ $? -eq 0 ]; then

     echo sored

else

     echo unsored

fi

 

#如果要合并两个排序过的文件

 

cat  data.txt

#有很多方法对这段文本排序

 

#执行用哪一列进行排序

 

sort -nrk 1 data.txt  

 

# 依据第一列,以逆序形式排序

 

#衣服第二列进行排序

sork -k 2 data.txt

 

 

# uniq  去重复字符

 

cat uniq .txt | uniq

 

cat uniq.txt | uniq -u  # 只显示未重复过的字符串

 

cat uniq.txt | uniq -c  #为了统计各行在文件中出现的次数

 

cat uniq.txt | uniq -d  #找出文件中重复的行

 

cat data.txt

u:01:gnu

d:04:linux

u:01:bash

u:01:back

# 我们需要 01, 04 中间的字符串作为唯一的键盘,可以通过忽略前2个字符(-s 2) 并使用-w 选项(-w 2) 指定用于比较的最大字符数的方式来选定该键

 

 

 

uniq -z file.txt  # 用uniq 命令生成包含0值字节的终止字符的输出

 

uniq -z file.txt | xargs  -0 rm   # 删除所有指定的文件,如果某个文件出现多次,uniq命令只会将这个文件写入stdout一次

 

# 临时文件名

temp_file = "/tmp/var.$$"

echo $temp_file;

# .$$作为添加的后缀会被扩展成当前脚本的进程ID

 

# 生成临时测试文件

dd if=/dev/zero bs=100k count=1 of=data.file

 

#分割文件

split -b 10k data.file

 

#分割文件添加前缀名

split -b 10k data.file -d -a 4 split_file

 

#如果不想默认按照数据块还切割

split -l 10 data.file 

# 分割成多个文件,每个文件10行

 

# 提取文件扩展名必须借助%

file_jpg = "sample.jpg"

name=${file_jpg%.*}

echo File name Is $name;

# ${VAR %.*} 的含义是,删除%右侧的通配符,非贪婪模式

# ${VAR%%.*} 从右向左执行贪婪模式匹配

 

# 借助#操作符号,可以提取文件名中的.jpg

jpg=${file_jpg#.*}

echo $jpg

# ${VAR#.*} 是从$VAR中删除位于#右侧的通配符,通配符从左向右进行匹配

# ${VAR##*.}  贪婪模式

 

# 实现批量重命名shell脚本

 

#!/bin/bash

#filename rename

#初始化变量

#循环所有文件夹内的jpg文件

for img in *.jpg

        do

                # 生成新文件名

                new=image-$count.${img##*.}

               #移动文件 2> /dev/null 标准错误指向空,防止打印到终端

                mv "$img" "$new" 2> /dev/null

              # 如果通配符*.jpg 没有匹配到人和图像文件,那么shell会将通配符接是为字符串。从上面的输出可以看到不存在的.jpg文件,因此

              # 如果 mv *.jpg image-x.jpg 肯定会产生错误,if ( $? -eq ] 检查退出状态($?) 如果最近执行的命令没有错误,那么$?的值是0,否则

             #  会返回非零值,当mv命令出错时也会返回非0值,防止产生 Renameing file 为空,计数也相加

                if [ $? -eq 0 ];

                then

                        echo "Renameing $img to $new"

                        let count++

                fi

done

 

将*.JPG 更名卫*.jpg

rename *.JPG *.jpg

 

将文件名中的空格替换为_

rename 's/ /_/g' *

# 's/ /_/g' 用于替换文件名, 而* 用于匹配文件名的通配符

 

文件名转换大小写

rename 'y/A-Z/a-z/' *

rename 'y/a-z/A-Z/ *

  

为了将mp3文件转移定的目录,可以使用

find path  -type f -name "*.mpe" -exec mv {} target_dir \;

 

将所有的文件名中的空格替换为字符_

find path -type f -exec rename '/s /_/g' {} \/;

 

查看更多关于Shell脚本第四篇 - Linux操作系统:Ubuntu_Centos_Debi的详细内容...

  阅读:71次