zoukankan      html  css  js  c++  java
  • sed实战、find实战、grep实战

    1.find实战

    # 删除指定文件(三种方法)
    find /data/ -type f -name "*.log" -exec rm {} ;
    find /data/ -type f -name "*.log" | xargs rm -f
    rm -f `find /data/ -type f -name "*.log"`
    
    # 删除修改时间在30天之前的文件,+30:30天之前;30:第三十天;-30:最近30天
    find /data/ -type f -name "*log" -mtime +30 | xargs rm -f
    
    # 查找/data目录下7天以前的,以log结尾的,大于1M的文件,移动到/tmp目录下
    find /data/ -type f -name "*.log" -size +1M -mtime +7 -exec mv {} /tmp/ ;
    
    # 将某一目录下的所有目标文件,替换成指定内容,xargs的原理是将传过来的结果变成一行
    find /data/ -type f -name "*.sh" | xargs sed -i "s#oldboy#oldgirl#g"
    sed -i"s#oldgirl#oldboy#g" `find /data/ -type f -name "*.sh"`
    
    # -a:并集;-o:交集
    find /data/ -type f -name "test.sh" -o -name "hehe.sh"
    
    # 删除当前目录下除了oldgirl.txt的所有文件
    find . -type f ! -name oldgirl.txt  | xargs 
    m -f
    
    # 找出当前目录下的所有一级目录
    find . -maxdepth 1 -type d ! -name "."
    tree -d /data    # 查看目录结构
    tree -Ld 1 /data # 只看一级目录
    # 这三个的inode是一样的,3指的是硬链接个数
    ls -ldi /data/old/ /data/old/. /data/old/ett/..
    

    2.grep实战

    # grep限定单词边界
    cat oldboy.txt
    oldboy  hello word
    oldboy1 hello word
    # 打印符合条件的行,-n显示行号
    grep -n "oldboy" oldboy.txt
    1:oldboy  hello word
    2:oldboy1 hello word
    
    # 只匹配有这个单词的行
    grep -n "oldboy" oldboy.txt 
    1:oldboy  hello word
    # -w参数是按单词搜索,只匹配有这个单词的行
    grep -w "oldboy" oldboy.txt  
    oldboy  hello word
    

    3.-e多点编辑

    # 一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell
    sed -e '3,$d' -e 's#bash#blueshell#' /etc/passwd
    # 用-e参数显示一下结果,然后用-i直接去修改
    sed -i '3,$d;s#bash#blueshell#' passwd.txt
    
    # 利用sed将hehe.txt内每一行结尾的.则换成!
    sed -i 's#.$#!#g' hehe.txt
    sed -r 's#!$#.#g' hehe.txt
    # 利用 sed 直接在 hehe.txt 最后一行加入"# This is a test"
    sed -i '$a # This is a test' hehe.txt
    

    4.删除第三行到末尾的行,并且将10修改为01(四种方法)

    cat person.txt
    101,oldboy,CEO
    102,zhangyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    
    方法一:sed '3,$d' person.txt|sed 's#10#01#g'
    方法二:sed -e '3,$d' -e 's#10#01#g' person.txt
    方法三(此方法最常用):sed '3,$d;s#10#01#g' person.txt
    方法四:sed -f person.sed person.txt
    cat person.sed
    3,$d
    s#10#01#g
    

    5.sed跟单引号、双引号的结合

    cat test.txt
    a
    b
    a
    
    x=a
    y=b
    # 一个文本test.txt有三行内容;然后赋值变量:x=a、y=b,对文本进行内容替换
    sed s#$x#$y#g test.txt  # 相当于
    sed "s#$x#$y#g" test.txt
    # 用单引号不行
    sed 's#$x#$y#g' test.txt
    # eval可以先解析变量
    eval sed 's#$x#$y#g' test.txt
    

    6.sed处理开机自启服务

    # 基础正则遇到括号需要转义,-r表示扩展正则;
    # grep -E参数相当于egrep,也是扩展正则的意思.
    chkconfig --list | grep 3:on | egrep -v "crond|sshd|network|rsyslog|sysstat" |
    awk '{print "chkconfig",$1,"off"}' | bash
    chkconfig --list | grep "3:on"|grep -vE "sshd|crond|network|rsyslog|sysstat"|
    awk '{print $1}'|sed -r  's#(^.*)#chkconfig 1 off#g'|bash
    

    7.批量修改文件名

    sed '1,3s#C#--&--#g' person.txt 
    # 此处的&就是C,即 & 就是两个##之间匹配到的内容
    touch  stu_102999_{1..5}_finished.jpg
    ls *jpg | sed -r 's#(^.*)_finished.*#mv & 1.jpg#g' | bash
    # rename命令挺强大
    rename  "_102999" "hehe" *jpg  
    

    8.awk、sed取IP地址

    # ^.*dr:匹配的是--以任意字符开头,到dr:
    # 两个空格B.*$,匹配到结尾,括号中的内容通过后向引用取到,即ip地址
    ifconfig eth0 | sed -nr '/inet addr/s#^.*dr:(.*)  B.*$#1#gp'
    ifconfig eth0 | awk -F "[ :]+" 'NR==2{print $4}'
    
    # 删除空行(awk只是打印了空行行号)
    sed -i '/^$/d' oldboy.txt
    awk '/^$/ {print NR}' oldboy.txt
    

    9.如何取得一个文件的权限数字,如:644

    ls -l a.txt | cut -c2-10 | tr "rwx-" "4210" | awk -F "" '{print $1+$2+$3$4+$5+$6$7+$8+$9}'
    stat a.txt | sed -nr 's#^.*(0(.*)/-.*$#1#gp'
    # awk的分隔符一般是要取的那个元素的前后两个
    stat a.txt | awk -F "[0/]" 'NR==4 {print$2}'  
    stat -c %a a.txt
    

    10.网站被攻击,所有文件都被加上了一行js,统一删除被加进去的内容

    # 模拟环境
    find . -type f | xargs sed -i '1 i <script>qweqweqwe</script>'
    # 一条命令修改内容,另一种方法:用备份去还原
    find . -type f | xargs sed -ir 's#<script>.*</script>##g'
    # -n:不换行
    echo -n "oldboy";echo "oldboy"
    # -e:支持转义
    echo -ne "oldboy	";echo "oldboy"
    
  • 相关阅读:
    ChineseAlphabetUtil获取汉字首字母工具类
    RandomCodeUtil随机数工具类,随机生成数字、字母、数字字母组合、中文姓名
    ValidateUtil常用验证工具类,如手机、密码、邮箱等
    聊天项目
    日期
    字符串
    java中属性,set get 以及如何学习类的一些用法
    继承 多态 封装
    方法 属性 构造方法和包
    面向对象知识
  • 原文地址:https://www.cnblogs.com/fawaikuangtu123/p/9788446.html
Copyright © 2011-2022 走看看