• Find and Grep


    find

    1.格式

    Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

      default path is the current directory;

      default expression is -print

    expression may consist of: operators, options, tests, and actions

       find [path...] [operators,options,tests,actions]

    2.参数

    operators (decreasing precedence; -and is implicit where no others are given):

          ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2       EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2

    positional options (always true):

       -daystart -follow -regextype

    normal options (always true, specified before other expressions):

     -depth

    --help

    -maxdepth LEVELS

    -mindepth LEVELS

    -mount -noleaf      

    --version

    -xdev

    -ignore_readdir_race

    -noignore_readdir_race

    tests (N can be +N or -N or N):

    -amin N -anewer FILE -atime N,文件访问时间 -cmin N
    -cnewer FILE -ctime N,文件创建时间 -empty -false
    -fstype TYPE -gid N -group NAME -ilname PATTERN
    -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN  
    -links N -lname PATTERN -mmin N -mtime N,文件更改时间
    -name PATTERN,名字 -newer FILE -nouser,no user -nogroup, no group
    -path PATTERN -perm [+-]MODE,权限 -regex PATTERN -readable
    -writable -executable -wholename PATTERN -size N[bcwkMG]
    -true -type [bcdpflsD] -uid N -used N
    -user NAME -xtype [bcdpfls]    

    actions:  

    -delete  

    -print0  

    -printf FORMAT  

    -fprintf FILE FORMAT  

    -print 将查找到的文件输出到标准输出 

    -fprint0 FILE

    -fprint FILE

    -ls

    -fls FILE

    -prune

    -quit      

    -exec COMMAND ; 对匹配的文件执行COMMAND命令。相应命令的形式为'command' { } ;,注意{ }和;之间的空格。

    -exec COMMAND {} + -ok COMMAND ;  ok 和-exec相同,只不过在操作前要询用户

    -execdir COMMAND ;

    -execdir COMMAND {} + -okdir COMMAND ;

    如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

    find的使用实例:

      $ find . -name 'my*'

    搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。

      $ find . -name 'my*' -ls

    搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。

      $ find . -type f -mmin -10

    搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。

    用例:

    //从根目录下开始查找abc.cpp文件,无错误输出
    find / -name abc.cpp 2>/dev/null
    
    //在当前目录下所有.cpp文件中查找efg函数,xargs展开find获得的结果,使其作为grep的参数
    find . -name "*.cpp" | xargs grep 'efg'
    
    //删除当前目录下所有.cpp文件
    find . -name "*.cpp" | xargs rm

    另外 rm mv等命令对大量文件操作是报错 -bash: /bin/rm: Argument list too long 也可用xargs 解决

    grep

    1.格式

    Usage:grep [OPTION]... PATTERN [FILE]...

    Search for PATTERN in each FILE or standard input. PATTERN is, by default, a basic regular expression (BRE).

    2.参数

    Regexp selection and interpretation 正则表达式选择与说明:  

    -E, --extended-regexp     PATTERN is an extended regular expression (ERE)  

    -F, --fixed-strings       PATTERN is a set of newline-separated fixed strings  

    -G, --basic-regexp        PATTERN is a basic regular expression (BRE)  

    -P, --perl-regexp         PATTERN is a Perl regular expression  

    -e, --regexp=PATTERN      use PATTERN for matching  

    -f, --file=FILE           obtain PATTERN from FILE  

    -i, --ignore-case         ignore case distinctions   忽略大小写

    -w, --word-regexp         force PATTERN to match only whole words  只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),

    -x, --line-regexp         force PATTERN to match only whole lines  

    -z, --null-data           a data line ends in 0 byte, not newline

    Miscellaneous 其他控制参数:  

    -s, --no-messages         suppress error messages 忽略错误信息  

    -v, --invert-match        select non-matching lines  

    -V, --version             print version information and exit      

    --help                display this help and exit      

    --mmap                deprecated no-op; evokes a warning

    Output control 输出控制参数:  

    -m, --max-count=NUM       stop after NUM matches  

    -b, --byte-offset         print the byte offset with output lines  

    -n, --line-number         print line number with output lines  输出行号    

         --line-buffered       flush output on every line  

    -H, --with-filename       print the file name for each match  

    -h, --no-filename         suppress the file name prefix on output      

         --label=LABEL         use LABEL as the standard input file name prefix  

    -o, --only-matching       show only the part of a line matching PATTERN  

    -q, --quiet, --silent     suppress all normal output      

         --binary-files=TYPE   assume that binary files are TYPE;  TYPE is 'binary', 'text', or 'without-match'  

    -a, --text                equivalent to --binary-files=text  

    -I                        equivalent to --binary-files=without-match  

    -d, --directories=ACTION  how to handle directories; ACTION is 'read', 'recurse', or 'skip' 搜索项中目录的处理方式,recurse递归搜索

    -D, --devices=ACTION      how to handle devices, FIFOs and sockets; ACTION is 'read' or 'skip' 搜索项中设备文件的处理方式  

    -r, --recursive           like --directories=recurse 递归搜索,等同于 -d recurse参数 

    -R, --dereference-recursive  likewise, but follow all symlinks 递归搜索,但是可以添加搜索选项     

         --include=FILE_PATTERN  search only files that match FILE_PATTERN    只搜索匹配FILE_PATTERN的文件

         --exclude=FILE_PATTERN  skip files and directories matching FILE_PATTERN   忽略匹配FILE_PATTERN的文件和目录

         --exclude-from=FILE   skip files matching any file pattern from FILE   忽略匹配从FILE中获取的FILE_PATTERN的文件

         --exclude-dir=PATTERN  directories that match PATTERN will be skipped.  忽略匹配FILE_PATTERN的目录

    -L, --files-without-match  print only names of FILEs containing no match  只输出不包含匹配字符的文件名

    -l, --files-with-matches  print only names of FILEs containing matches  只输出包含匹配字符的文件名

    -c, --count               print only a count of matching lines per FILE 只输出每个文件中匹配行的计数  

    -T, --initial-tab         make tabs line up (if needed)  

    -Z, --null                print 0 byte after FILE name

    Context control 上下文控制参数:  

    -B, --before-context=NUM  print NUM lines of leading context  显示匹配的前NUM行

    -A, --after-context=NUM   print NUM lines of trailing context  显示匹配的后NUM行

    -C, --context=NUM         print NUM lines of output context  显示匹配的前后NUM行

    -NUM                      same as --context=NUM      

         --color[=WHEN],      

         --colour[=WHEN]       use markers to highlight the matching strings; WHEN is 'always', 'never', or 'auto'  

    -U, --binary              do not strip CR characters at EOL (MSDOS/Windows)  

    -u, --unix-byte-offsets   report offsets as if CRs were not there  (MSDOS/Windows)

    pattern正则表达式主要参数:

    : 忽略正则表达式中特殊字符的原有含义。

    ^:匹配正则表达式的开始行。

    $: 匹配正则表达式的结束行。

    <:从匹配正则表达 式的行开始。

    >:到匹配正则表达式的行结束。

    [ ]:单个字符,如[A]即A符合要求 。

    [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。

    。:所有的单个字符。

    * :有字符,长度可以为0。

    默认情况下,‘grep’只搜索当前目录。如果此目录下有许多子目录,‘grep’会以如下形式列出:

    grep: sound: Is a directory

    这可能会使‘grep’的输出难于阅读。这里有两种解决的办法:

    grep -r 或 grep -d recurse:递归搜索子目录
    grep -d skip:忽略子目录
    当然,如果预料到有许多输出,您可以通过 管道 将其转到‘less’上阅读:

    $ grep magic /usr/src/linux/Documentation/* | less

    有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,‘grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 <CTRL c> ,然后再试。
    grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
    grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
    这里还有些用于搜索的特殊符号:

    < 和 > 分别标注单词的开始与结尾。
    例如:
    grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,
    grep ‘<man’ * 匹配‘manic’和‘man’,但不是‘Batman’,
    grep ‘<man>’ 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
    ‘^’:指匹配的字符串在行首,
    ‘$’:指匹配的字符串在行尾,

    用例:

    $ grep ‘test’ d*
    显示所有以d开头的文件中包含 test的行。也可以使用cat d* | grep 'test'
    
    $ grep ‘test’ aa bb cc
    显示在aa,bb,cc文件中匹配test的行。
    
    $ grep "dma" * -nR --include=*.dts*
    在匹配*.dts*的文件中查找dma,如果使用 grep "dma" *.dts* -nR则只会查找本级目录
    
    $ grep "dma" * -nR | grep -v "case"
    递归查找包含dma但是不包含case的文本
    
    $ grep ‘[a-z]{5}’ aa
    显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
    
    $grep ‘w(es)t.*1′ aa
    如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着
    另外一个es(1),找到就显示该行。如果用egrep或grep -E,就不用””号进行转义,直接写成’w(es)t.*1′就可以了。
    
    # grep '^root' /etc/group 匹配正则表达式的开始行 
    root::0:root 
    # grep 'root$' /etc/group 匹配正则表达式的结束行 
    root::0:root 
    mail::6:root 
    
    grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
    grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
    
  • 相关阅读:
    各种数据类型的取值范围(总结全)
    Help Johnny-(类似杭电acm3568题)
    ExtJs 设置GridPanel表格文本垂直居中
    批处理通过字符串截取得到文件名
    sql优化-提防错误关联
    Unix Domain Socket 域套接字实现
    solr源码分析之数据导入DataImporter追溯。
    spark初识
    Spark:一个高效的分布式计算系统--转
    Importing/Indexing database (MySQL or SQL Server) in Solr using Data Import Handler--转载
  • 原文地址:https://www.cnblogs.com/qiengo/p/5955076.html
Copyright © 2020-2023  润新知