您的位置:首页 > 运维架构 > Shell

Linux Shell脚本攻略笔记2之命令之乐

2016-06-14 00:08 399 查看
cat

    文件拼接
    cat 1.txt 2.txt 

    摆脱多余空白行
    $ cat -s ss.tst
        或者tr  $ cat ss.tst |tr -s '\n'

    显示行号 -n 
    $ cat -n ss.tst 

录屏

    $ script -t 2> timing.log -a output.session
    exit结束

回放

    $ scriptreplay timing.log output.session

xargs

    单行->多行;多行->单行
    stu2452@ubuntu:~/shell$ cat examle.txt
        1
        2  3 4 5 
        6
        7
        8    9
    $ cat examle.txt | xargs 
        1 2 3 4 5 6 7 8 9
    $ cat examle.txt | xargs -n3
        1 2 3
        4 5 6
        7 8 9

    指定分隔符 -d
    $ echo "spamXspamXspamXspamXspam"|xargs -d X -n2
        spam spam
        spam spam
        spam

    xargs实现循环
    $ ls "*.txt" | xargs -n1 -i{} mv {} {}.bak

    结合find使用
    $ find . -type f -name "*.bak" -print0 | xargs -0 rm -f
    注:find的输出做xarg输入必须将-print0 与find结合使用,以字符null('\0')来分割输出

    统计c 源码中有多少行
    $ find . -type f -name "*.c" -print0 | xargs -0 wc -l
        34 ./jsq.c
        26 ./hws.c
        24 ./1.c
        29 ./wwwww.c
        29 ./huiwenshu.c
        142 total

find 

    -atime  访问时间
    -mtime  内容修改时间
    -ctime  元数据(权限,属主)改变
    -7 7天内            -amin
     7 7天前            -mmin
    +7 超过7天            -cmin

    比file1 修改时间更近
    $ find . -type f -newer file1 -print

    基于文件大小
    $ find . -type f -size +2k

    基于权限
    $ find . -type f -perm 644

    删除匹配文件
    $ find . -type f -perm 644 -delete

    结合 -exec
    $ find . -type f -user root -exec chown dog {} \;
    $ find . -type f -name "*.c" -exec cat {} \; > c_file.txt

tr

    大写转小写
    #echo "HELLO WORLD" | tr 'A-Z' 'a-z'

    加密,解密
    $ echo "I am a student,Do you want to make friend with me?" | tr 'a-zA-Z' 'n-za-mN-ZA-M'
        V nz n fghqrag,Qb lbh jnag gb znxr sevraq jvgu zr?
    $ echo "V nz n fghqrag,Qb lbh jnag gb znxr sevraq jvgu zr?" | tr 'a-zA-Z' 'n-za-mN-ZA-M'
        I am a student,Do you want to make friend with me?

    制表符转空格
    $ tr '\t' ' ' 

    删除字符
    $ cat 1_1.sh |tr -d 'echo'

    压缩字符 -s
    $ echo "GUn      is   not a      linux." | tr -s ' '
        GUn is not a linux.

    擦除多余空格符
    $ cat sum.txt | tr -s '\n'

    字符类
       [:alnum:]  :字母数字
       [:alpha:]  :字母 
       [:blank:]  : all horizontal whitespace
       [:cntrl:]  :控制(非打印)字符
       [:digit:]  :数字
       [:graph:]  :图形字符
       [:lower:]  :小写
       [:print:]  :可打印字符
       [:punct:]  :标点符号
       [:space:]  :空白字符
       [:upper:]  :大写
       [:xdigit:]  :16进制字符
       [=CHAR=]: all characters which are equivalent to CHAR

    $ echo "hello world" | tr '[:lower:]' '[:upper:]'
    HELLO WORLD

校验与核实md5sum

    $ md5sum 1.c > 1.c.md5
    $ md5sum -c 1.c.md5
        1.c: OK   没改变

    对目录进行校验
    $ md5deep -rl python ./python > dir_md5.txt
        -r   使用递归方式
        -l   使用相对路径,默认绝对路径

    结合-exec 使用
    $ find . type f -print0 | xargs -0 md5sum >> dir.txt
    $ md5sum -c dir_md5.txt

sort

    按数字排序输出到文件
    $ sort -n 1.txt 2.txt -o sorted.txt
    -r  逆序
    -M  按月份
    -m  合并两个已经排序的文件
    $ sort  1.txt 2.txt |uniq   排序不重行
    -C  检查文件是否排序 echo $? 查看结果
    -k  指定哪个键排序
    $ sort -nrk 3 3.txt  按第三列按数字逆序

uniq 

    -c  统计重复行数目
    -d  找出重复行

临时文件命名与随机数

    $ mktemp    创建临时文件
        /tmp/tmp.FMbpewYwO5
    $ mktemp -d     创建临时目录
        /tmp/tmp.NC9FLSWhTM
    $ mktemp -u     不创建文件,只取名字
        /tmp/tmp.Cbf2Yy4DUu
    $ mktemp test.XXX   根据模板创建文件名
        test.7Hv

分割文件split

    $ split -b 10k date.file    按字节
    $ split -l 10 date.file    按行数,10行
    $ split -b 10k date.file -d -a 4 split_file
        split_file0001 split_file0002 ...
    $ csplit server.log /SERVER/ -n 2 -s {*} -f server -b "%02d.log" ; rm server00.log    

根据拓展文件名切分文件    

    $ VAR=www.dlmu.edu.cn
    $ echo ${VAR}
        www.dlmu.edu.cn
    $ echo ${VAR%.*}
        www.dlmu.edu
    $ echo ${VAR%%.*}
        www
    $ echo ${VAR#*.}
        dlmu.edu.cn
    $ echo ${VAR##*.}
        cn

rename

    将文件名小写便大写
    $ rename 'y/a-z/A-Z/' *

    把MP3文件移到MP3目录
    find -type f -name "*.mp3" -exec mv {} mp3/ \;

    把所有文件空格换为字符'_'
    $ find . -type f -exec rename 's/ /_/g' {} \;

look android  查字典是否拼写错误

利用并行进程加速执行

    #!/bin/bash
    PIDARRAY=()
    for file in 1.sh 2.sh 1_1.sh 2_1.sh 6.sh
    do
        md5sum $file &
        PIDARRAY+=("$!")
    done
    wait ${PAIARRAY[@]}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: