zoukankan      html  css  js  c++  java
  • linux 查找替换


    查找


    find [路径] <表达式>
    查找文件
    -name <表达式> 根据文件名查找文件
    -iname <表达式> 根据文件名查找文件,忽略大小写
    -path <表达式> 根据路径查找文件
    -ipath <表达式> 根据路径查找文件,忽略大小写
    -amin <分钟> 过去N分钟内访问过的文件
    -atime <天数> 过去N天内访问过的文件
    -cmin <分钟> 过去N分钟内修改过的文件
    -ctime <天数> 过去N天内修改过的文件
    -anewer <参照文件> 比参照文件更晚被读取过的文件
    -cnewer <参照文件> 比参照文件更晚被修改过的文件
    -size <大小> 根据文件大小查找文件,单位b c w k M G
    -type <文件类型> 根据文件类型查找文件。b 块设备 c 字符设备 d 目录 p 管道文件 f 普通文件 l 链接 s 端口文件
    -user <用户名> 按归属用户查找文件
    -uid <uid> 按UID查找文件
    -group <群组名> 按归属群组查找文件
    -gid <gid> 按GID查找文件
    -empty 查找空文件


    从文件内容查找匹配指定字符串的行:
    $ grep "被查找的字符串" 文件名


    从文件内容查找与正则表达式匹配的行:
    $ grep –e “正则表达式” 文件名


    查找时不区分大小写:
    $ grep –i "被查找的字符串" 文件名


    查找匹配的行数:
    $ grep -c "被查找的字符串" 文件名


    从文件内容查找不匹配指定字符串的行:
    $ grep –v "被查找的字符串" 文件名

    从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行

    find / -type f -name "*.log" | xargs grep "ERROR"



    系统查找到httpd.conf文件后即时在屏幕上显示httpd.conf文件信息。 
    find/-name"httpd.conf"-ls

    在根目录下查找某个文件
    find . -name "test"

    在某个目录下查找包含某个字符串的文件

    grep -r "zh_CN" ./

    查找替换

    批量查找并替换文件内容。

    #   sed -i "s/要找查找的文本/替换后的文本/g" `grep -rl "要找查找的文本" ./`

    对于单个文件,使用sed命令很容易做到。如果需要替换某个指定文件夹下所有文件,借助grep和sed组合成一条命令也可以轻松搞定。

    grep命令可以查找单个文件或文件夹下文件中的内容,使用参数“r”或“-R”可以递归查找指定文件夹下的所有文件;

    参数“l”可以让grep输出包含指定字符串的文件名,首次匹配成功后立刻停止对同文件的查询

    如果不使用“l“,grep查询单个文件时输出文件中所有包含指定字符串的行,对文件夹查询时则按照“文件名:包含字符串行”的方式输出。

    有了上面提到的知识,执行批量替换的命令可以写为:

    grep "netingcn" -rl /assign-path | xargs sed -i 's/netingcn/ingcn/g'

    sed -i 's/netingcn/ingcn/g' `grep "netingcn" -rl /assign-path`

    还有一种比较复杂的写法:

    grep "netingcn" * -R | awk -F: '{print $1}'  | sort | uniq | xargs sed -i 's/netingcn/ingcn/g'

    其中命令awk用于分割字符串、uniq对结果进行除重。

    格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 


     将当前目录下的所有文件内的“garden”替换成“mirGarden” 
     sed -i "s/garden/mirGarden/g" `ls` //其实也就是ls出多个文件名而已

     

    比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做:
    sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules`
    解释一下:
    -i 表示inplace edit,就地修改文件
    -r 表示搜索子目录
    -l 表示输出匹配的文件名




    删除  rm + find

    find PATH -name REGX | xargs rm -rf
  • 相关阅读:
    2015 年最受 Linux 爱好者欢迎的软硬件大盘点
    Java 9终于要包含Jigsaw项目了
    Linux 容器技术史话:从 chroot 到未来
    开发者最常用的 8 款 Sublime Text 3 插件
    60,000毫秒内对Linux的性能诊断效的方法
    bzoj 2595 [Wc2008]游览计划(斯坦纳树)
    bzoj 3997 [TJOI2015]组合数学(DP)
    bzoj 1014 [JSOI2008]火星人prefix(splay+hash)
    bzoj 1090 [SCOI2003]字符串折叠(区间DP)
    bzoj 1537 [POI2005]Aut- The Bus(DP+BIT)
  • 原文地址:https://www.cnblogs.com/conncui/p/linuxshell.html
Copyright © 2011-2022 走看看