2023年7月26日发(作者:)
Linux学习之⽂本查找编辑替换命令本⽂主要包括Linux环境下最常使⽤的⽂本查找编辑替换等命令,包括:findgrepawksedfindLinux系统下⽤于⽂本查找定位的命令⾏。命令语法:find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [] [expression]find与xargs在使⽤find命令的-exec选项处理匹配到的⽂件时, find命令将所有匹配到的⽂件⼀起传递给exec执⾏。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运⾏⼏分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的⽤处所在,特别是与find命令⼀起使⽤。find命令把匹配到的⽂件传递给xargs命令,⽽xargs命令每次只获取⼀部分⽂件⽽不是全部,不像-exec选项那样。这样它可以先处理最先获取的⼀部分⽂件,然后是下⼀批,并如此继续下去。在有些系统中,使⽤-exec选项会为处理每⼀个匹配到的⽂件⽽发起⼀个相应的进程,并⾮将匹配到的⽂件全部作为参数⼀次执⾏;这样在有些情况下就会出现进程过多,系统性能下降的问题,因⽽效率不⾼;⽽使⽤xargs命令则只有⼀个进程。在使⽤xargs命令时,究竟是⼀次获取所有的参数,还是分批取得参数,以及每⼀次获取参数的数⽬都会根据该命令的选项及系统内核中相应的可调参数来确定。# ⽤.来表⽰当前⽬录,⽤/来表⽰系统根⽬录# -name指定根据关键字查找⽂件或者⽬录,-exec command {} ;将查到的⽂件执⾏command操作,{} 和 ;之间有空格;-ok 和-exec相同,只不过在操作前要询⽤户# 递归查找/打印当前⽬录下⾯的所有⽂件名是'.svn'的⽬录find . -name .svn -exec ls '{}' ;# 递归删除当前⽬录下⾯的所有⽂件名是'.svn'的⽬录find . -name .svn -exec rm -rf '{}' ;# 递归删除当前⽬录下⾯的所有⽂件名是'.classpath'的⽬录find . -name .classpath -exec rm -rf '{}' ;find . -name ".classpath" -exec rm -fr '{}' +# 另外如果要删除的⽂件名⾥⾯还有[]的话,命令执⾏失败,加⼊转义字符即可find . -name "name[with]bracket" -exec rm -fr '{}' +# 查找冲突的类/⽅法,即找出所有的jar包,再解压出其⽂件列表,再搜索冲突的类名find . -name '*.jar' -exec jar -tvf {} ; | grep EE
# 在当前⽬录递归查找列出所⽤⼤于 1000 MB 的⽂件,-type指定查找普通⽂件(f)或者⽬录(d),b – 块设备⽂件,c – 字符设备⽂件,p – 管道⽂件,l – 符号链接⽂件;-size n:[c] 查找⽂件长度为n块(⼀块等于512字节)的⽂件,带有c时表⽰⽂件长度以字节计# 在当前⽬录下查找⽂件长度⼤于1 M字节的⽂件find . -size +1000000c –print# 在当前⽬录下查找长度超过10块的⽂件find . -size +10 –print# 对查找结果排序:正序,从⼩到⼤ sort -r表⽰反序;第⼀个管道符号后命令:显⽰查询结果的详细信息(⽂件⼤⼩)find . -type f -size +1M -print0 |xargs -0 du -h|sort -nfind . -type f -size +800M -print0 | xargs -0 ls -lfind . -type f -size +800M -print0 | xargs -0 ls -lh# 列出所有CSS或HTML⽂件find . -type f ( -name "*.css" -or -name "*.html" )# -depth:在查找⽂件时,⾸先查找当前⽬录中的⽂件,然后再在其⼦⽬录中查找find / -name “” -depth –print# -mtime -n +n,按照⽂件更改时间来查找⽂件,– n表⽰⽂件更改时间距现在n天以内,+ n表⽰⽂件更改时间距现在n天以前# -newer file1 ! file2,查找更改时间⽐⽂件file1新但⽐⽂件file2旧的⽂件# -perm,按照⽂件权限来查找⽂件# -user,按照⽂件属主来查找⽂件;-nouser,查找⽆有效属主的⽂件,即该⽂件的属主在/etc/passwd中不存在# -group,按照⽂件所属的组来查找⽂件;-nogroup,查找⽆有效所属组的⽂件,即该⽂件所属的组在/etc/groups中不存在# -follow:如果find命令遇到符号链接⽂件,就跟踪⾄链接所指向的⽂件# -prune,不在当前指定的⽬录中查找,如果同时使⽤-depth选项,那么-prune将被find命令忽略# 在/apps⽬录下查找⽂件,但排除/apps/bin⽬录find /apps -path “/apps/bin” -prune -o –print# -mount:在查找⽂件时不跨越⽂件系统mount点# 从当前⽬录开始查找位于本⽂件系统中⽂件名以XC结尾的⽂件(不进⼊其他⽂件系统)find . -name “*.XC” -mount –print# find结合xargs,在当前⽬录及其⼦⽬录下查找包含abcd字符串的⽂件⾏,经常⽤于搜索代码。find . -type f | xargs grep 'abcd'find ./ -size 0 -exec rm {} ; 删除⽂件⼤⼩为零的⽂件 (还可以以这样做:rm -i find ./ -size 0 或 find ./ -size 0 | xargs rm -f &)为了⽤ls -l命令列出所匹配到的⽂件,可以把ls -l命令放在find命令的-exec选项中:find . -type f -exec ls -l { } ;在/logs⽬录中查找更改时间在5⽇以前的⽂件并删除它们:find /logs -type f -mtime +5 -exec rm { } ;-ok,和-exec的作⽤相同,只不过以⼀种更为安全的模式来执⾏该参数所给出的shell命令,在执⾏每⼀个命令之前,都会给出提⽰,让⽤户来确定是否执⾏。find . -name “*.conf” -mtime +5 -ok rm { } ; 在当前⽬录中查找所有⽂件名以.LOG结尾、更改时间在5⽇以上的⽂件,并删除它们,只不过在删除之前先给出提⽰
find . -type f -print | xargs file 查找系统中的每⼀个普通⽂件,然后使⽤xargs命令来测试它们分别属于哪类⽂件find / -name “core” -print | xargs echo “” >/tmp/ 在整个系统中查找内存信息转储⽂件(core dump) ,然后把结果保存到/tmp/ ⽂件中:find . -type f -print | xargs grep “hostname” ⽤grep命令在所有的普通⽂件中搜索hostname这个词find ./ -mtime +3 -print|xargs rm -f –r 删除3天以前的所有东西 (find . -ctime +3 -exec rm -rf {} ;)find ./ -size 0 | xargs rm -f & 删除⽂件⼤⼩为零的⽂件find命令配合使⽤exec和xargs可以使⽤户对所匹配到的⽂件执⾏⼏乎所有的命令。grepgrep,global search regular expression and print out the line,全⾯搜索正则表达式并把⾏打印出来,⼀个超级强⼤的⽂本搜索⼯具,使⽤正则表达式搜索内容(⽂件或输⼊流),并把匹配的⾏打印出来。In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use thebackslashed versions ?, +, {,|, ,and. Traditional egrep did not support the { meta-character, and some egrepimplementations support { instead, so portable scripts should avoid { in grep -E patterns and should use [{] to match aliteral {. GNU grep -E attempts to support traditional usage by assuming that { is not special if it would be the start ofan invalid interval specification. For example, the command grep -E ‘{1′ searches for the two-character string {1instead of reporting a syntax error in the regular expression. POSIX.2 allows this behavior as an extension, butportable scripts should avoid it.命令⾏语法:grep [OPTION]… PATTERN [FILE]…grep命令⽤于搜索由Pattern参数指定的模式,并将每个匹配的⾏写⼊标准输出中。这些模式是具有限定的正则表达式,它们使⽤ed或egrep命令样式。如果在File参数中指定了多个名称,grep命令将显⽰包含匹配⾏的⽂件的名称。对 shell 有特殊含义的字符 ($, *, [, |, ^, (,), ) 出现在 Pattern参数中时必须带双引号。如果 Pattern参数不是简单字符串,通常必须⽤单引号将整个模式括起来。在诸如 [a-z], 之类的表达式中,-(减号)cml 可根据当前正在整理的序列来指定⼀个范围。整理序列可以定义等价的类以供在字符范围中使⽤。如果未指定任何⽂件,grep会假定为标准输⼊。操作符.*+{N}{N,}x{N,M}[]含义匹配任何单个⾮换⾏符字符匹配前⼀个字符0次或者1次匹配前⼀个字符>=0次,.*⼀起⽤代表任意字符。匹配前⼀个字符>=1次匹配前⼀个字符N次匹配前⼀个字符>=N次匹配字符x N~M次匹配⼀个指定范围内的字符如’[Gg]rep’匹配Grep和grep如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的⼀个字母开头,紧跟rep的⾏如:’(love)’,love被标记为1实例[^]匹配⼀个不在指定范围内的字符(…)-标记匹配字符表⽰范围开始标记,表⽰在开始位置匹配⼀个空字符串,也表⽰不在列表的范围内字符结束标记,匹配⼀个空的字符串单词锁定符,在⼀个单词的边缘位置匹配空字符串在⼀个单词的⾮边缘位置匹配空字符串匹配单词开始的空字符串匹配单词结尾的字符串匹配⼀个⽂字或数字字符,也就是[A-Za-z0-9]w的反置形式,匹配⼀个⾮单词字符,如点号句号等,W*则可匹配多个^$bB<>wW如‘bgrepb’只匹配grep,两边均为空格。如’Gw*p’匹配以G后跟零个或多个⽂字或数字字符,然后是p常⽤选项选项缩写选项完整意义⽰例-?-同时显⽰匹配⾏上下的?⾏grep -2 pattern filename同时显⽰匹配⾏的上下2⾏。-b选项缩写-c–byte-offset选项完整–count打印匹配⾏前⾯打印该⾏所在的块号码。意义只打印匹配的⾏数,不显⽰匹配的内容。从⽂件中提取模板。空⽂件中包含0个模板,所以什么都不匹配。当搜索多个⽂件时,不显⽰匹配⽂件名前缀。忽略⼤⼩写差别。取消显⽰,只返回退出状态。0则表⽰找到了匹配的⾏。打印匹配模板的⽂件清单⽰例-f File–file=File-h-i-q-l–no-filename–ignore-case–quiet–files-with-matches–files-without-match–line-number–silent–revert-match–word-regexp–version-L打印不匹配模板的⽂件清单-n-s-v-w-V在匹配的⾏前⾯打印⾏号不显⽰关于不存在或者⽆法读取⽂件的错误信息反检索,只显⽰不匹配的⾏如果被引⽤,就把表达式做为⼀个单词搜索显⽰软件版本信息命令⾏实例# 在当前⽬录下查找"xml"字符串,* : 表⽰当前⽬录所有⽂件,-r 是递归查找,-n 是显⽰⾏号,-R递归,-i 忽略⼤⼩写,否则⼤⼩写敏感,-l只列出匹配的⽂件名, -L列出不匹配的⽂件名, -w只匹配整个单词⽽不是字符串的⼀部分,grep -rn "xml" *# 匹配的上下⽂分别显⽰[number]⾏grep -C number pattern files# 匹配 pattern1 或 pattern2grep pattern1 | pattern2 files# 既匹配 pattern1 ⼜匹配 pattern2grep pattern1 files | grep pattern2# 列举含有xml关键字的⽂件grep xml -rl *# 列举出含有xml关键字的⾏grep google -r *# 查找⽂件满⾜指定⽇期的⽇志,重定向到另⼀个⽂件# grep "(date +"%Y-%m-%d")" > # 搜索vivek,即不区分⼤⼩grep -i -w vivek /etc/passwd# 使⽤了扩展正则表达式的模式:不区分⼤⼩写地检索 ‘vivek’ 和 ‘raj’grep -E -i -w 'vivek|raj' /etc/passwd# 使⽤ ^ 和 $ 符号强制⼀个正则表达式分别匹配⼀⾏的开始或结束的位置grep ^vivek /etc/passwd# 显⽰以 vivek 单词开头的⽂本⾏grep -w ^vivek /etc/passwd# 检索以 ‘foo’ 结尾的⽂本格式grep 'foo$' FILENAME# 搜索空⽩⾏grep '^$' FILENAME# 在grep中使⽤ OR 的逻辑运算grep -E 'word1|word2' FILENAMEegrep 'word1|word2' FILENAMEgrep 'word1|word2' FILENAME# 在grep中使⽤ AND 的逻辑运算,显⽰所有包含单词 ‘word1′ 和 ‘word2′ 的结果grep 'word1' FILENAME | grep 'word2'grep 'foo.*bar|word3.*word4' FILENAME1、如何检索⼀个具有以 ‘-‘ 开头的的模式?使⽤ -e 选项搜索所有匹配 ‘–test–‘ 的结果。grep 会尝试把 ‘–test–‘ 作为⼀个选项解析:grep -e '--test--' FILENAME4、如何测试序列?你可以使⽤下⾯的语法测试⼀个字符在序列中的重复的次数:{N}{N,}{min,max}匹配包含两个字母 v 的字符串结果:egrep "v{2}" FILENAME下⾯的例⼦中将检索⽂件内包含 “col” 和 “cool” 的字符串结果:egrep 'co{1,2}l' FILENAME下⾯的例⼦中将匹配⾄少含有3个字母 c 的结果:egrep 'c{3,}' FILENAME下⾯的⽰例将匹配 “91-1234567890″ 格式的⼿机号码:grep "[[:digit:]]{2}[ -]?[[:digit:]]{10}" FILENAME5、如何使 grep 的输出结果⾼亮标注?使⽤下⾯例⼦的语法:grep --color regex FILENAME6、如何使 grep 的输出只显⽰匹配的部分⽽不是整⾏?使⽤下⾯例⼦的语法:grep -o regex FILENAME⽤ “.” 来代替单个字符,查询所有以 “b” 开头、 “t” 结尾的三个字符的单词grep '
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690360687a337730.html
评论列表(0条)