Linux学习之文本查找编辑替换命令

Linux学习之文本查找编辑替换命令

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 '' FILENAME< 在单词的开始位置匹配空格字符串> 在单词的结尾匹配空格字符串检索并输出所有两个字母的结果:grep '^..$' FILENAME检索并显⽰所有以 ‘.’ 和数字开头的结果:grep '^.[0-9]' FILENAME转义字符’.’下⾯的正则表达式查找 IP 地址 192.168.1.254 将不能获得预期的结果:grep '192.168.1.254' /etc/hosts其中三个点都需要被转义:grep '192.168.1.254' /etc/hosts以下⽰例将只匹配⼀个地址:egrep '[[:digit:]]{1,3}.[[:digit:]]{1,3}.[[:digit:]]{1,3}.[[:digit:]]{1,3}' FILENAME以下将不分⼤⼩写地匹配单词 Linux 或 Unix :egrep -i '^(linux|unix)' FILENAME# 匹配 ‘Vivek’ 或 ‘vivek’grep '[vV]ivek' FILENAME# 匹配 vivek1 或 Vivek2grep -w '[vV]ivek[0-9]' FILENAME# 匹配foo11 or foo12grep 'foo[0-9][0-9]' FILENAME# 匹配字母grep '[A-Za-z]' FILENAME# 匹配所有包含“w” 或 “n” 字母的⽂本⾏grep [wn] FILENAME# 在括号内的表达式中,在“ [: ”和“ :] ”中所附的字符类的名称:代表属于该类的所有字符的列表。标准字符类名称:[:alnum:] – 字母数字字符。[:alpha:] – 字母顺序[:blank:] – 空格和制表符。[:digit:] – 数字: ‘0 1 2 3 4 5 6 7 8 9’。[:lower:] – ⼩写字母:‘a b c d e f ‘。[:space:] – 特殊字符:制表符,换⾏符,垂直制表符、换页,回车,和空间。[:upper:] – ⼤写字母:‘A B C D E F G H I J K L M N O P Q R S T U V W X Y Z’。# 匹配所有⼤写字母grep '[:upper:]' FILENAMEls -l | grep ‘^a’ 通过管道过滤ls -l输出的内容,只显⽰以a开头的⾏。grep ‘test’ d* 显⽰所有以d开头的⽂件中包含test的⾏。grep ‘test’ aa bb cc 显⽰在aa,bb,cc⽂件中匹配test的⾏。grep ‘[a-z]’ aa 显⽰所有包含每个字符串⾄少有5个连续⼩写字符的字符串的⾏。grep ‘w(es)t.*’ aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后⾯紧跟着另外⼀个es(),找到就显⽰该⾏。如果⽤egrep或grep -E,就不⽤””号进⾏转义,直接写成’w(es)t.*’就可以了。grep -i pattern files :不区分⼤⼩写地搜索。默认情况区分⼤⼩写grep -l pattern files :只列出匹配的⽂件名,grep -L pattern files :列出不匹配的⽂件名,grep -w pattern files :只匹配整个单词,⽽不是字符串的⼀部分(如匹配‘magic’,⽽不是‘magical’),grep -w pattern files :只匹配整个单词,⽽不是字符串的⼀部分(如匹配‘magic’,⽽不是‘magical’),grep -C number pattern files :匹配的上下⽂分别显⽰[number]⾏,grep pattern1 | pattern2 files :显⽰匹配 pattern1 或 pattern2 的⾏,grep pattern1 files | grep pattern2 :显⽰既匹配 pattern1 ⼜匹配 pattern2 的⾏。1.搜索和寻找⽂件$ sudo dpkg -l | grep -i python运⾏dpkg -l列出你系统上安装的.deb包。使⽤管道将输出结果传输给命令grep -i python,这⼀步可以简单解释为把结果传输给grep然后过滤出所有含有python的项,并返回结果。–i选项⽤于忽略⼤⼩写,因为 grep 是⼤⼩写敏感的。使⽤选项-i是个好习惯,除⾮你打算进⾏更细节的搜索。2.搜索和过滤⽂件grep还可以在⼀个或多个⽂件⾥⽤于搜索和过滤。移除⽂件所有的注释⾏$ sudo grep -v "#" 选项-v是告诉grep命令反转它的输出结果,意思就是不输出匹配的项,做相反的事,打印出所有不匹配的项。假设有#的是注释⾏(实际上不尽然)。3.找出所有的mp3⽂件找出jayZ的所有mp3格式⽂件,也不要有任何混合⾳轨。使⽤find再结合管道使⽤grep:$ sudo find . -name ".mp3" | grep -i JayZ | grep -vi "remix""使⽤find命令打印出所有以.mp3为后缀名的⽂件,接着将其使⽤管道传递给grep -i过滤和打印出名字为“JayZ”的⽂件,再使⽤管道传送给grep -vi以便过滤掉含有“remix”的项。4.在搜索字符串前⾯或者后⾯显⽰⾏号-A和-B之间的切换,是⽤以显⽰匹配的⾏以及⾏号,分别控制在字符串前或字符串后显⽰的⾏数:-A=after、-B=before。$ sudo ifconfig | grep -A 4 etho $ sudo ifconfig | grep -B 2 UP5.在匹配字符串周围打印出⾏号grep命令的-C选项和例4中的很相似,不过打印的并不是在匹配字符串的前⾯或后⾯的⾏,⽽是打印出两个⽅向都匹配的⾏(译注:同上⾯的记忆窍门⼀样:-C=center,以此为中⼼): $ sudo ifconfig | grep -C 2 lo6.计算匹配项的数⽬将grep输出的结果⽤管道传送给计数器(wc程序),grep内建的选项可以达到同样的⽬的:$ sudo ifconfig | grep -c inet67.按给定字符串搜索⽂件中匹配的⾏号n选项告诉你所搜索的内容在⽂件的哪⼀⾏,当你在编译出错时需要调试时:$ sudo grep -n "main" 8.在所有⽬录⾥递归的搜索假若你要在当前⽂件夹⾥搜索⼀个字符串,-r选项⽤于递归的搜索: $ sudo grep -r “function” *9.进⾏精确匹配搜索-w选项给grep命令可以在字符串中进⾏精确匹配搜索(译注:包含要搜索的单词,⽽不是通配):$ sudo ifconfig | grep -w “RUNNING”将打印出含有引号内匹配项的⾏:$ sudo ifconfig | grep -w “RUN”搜索这个匹配项时,若搜索的东西⾥⾯没有这样的⼀个单独的单词,将什么也不会返回。10.在Gzip压缩⽂件中搜索grep的衍⽣命令⾏⼯具。第⼀个是zgrep,与zcat很相似,⽤于gzip压缩过的⽂件。与grep相似的命令选项:$ sudo zgrep -i error /var/log/11. egrepegrep,即 grep -E ,它把模式作为⼀个扩展的正则表达式解释。它可以识别更多的正则表达式元字符,例如at + ? | 和()。12.搜索⼀个固定匹配字符串fgrep⽤于在⼀个⽂件或⽂件列表中搜索固定样式的字符串。功能与grep -F同。fgrep的⼀个通常⽤法为传递⼀个含有样式的⽂件给它:$ sudo fgrep -f file_full_of_ file_to_p还可以写成cron任务或者⾃动的shell脚本去执⾏。sedsed是⾮交互式的编辑器。它不会修改⽂件,除⾮使⽤shell重定向来保存结果。默认情况下,所有的输出⾏都被打印到屏幕上。sed编辑器逐⾏处理⽂件(或输⼊),并将结果发送到屏幕。具体过程如下:⾸先sed把当前正在处理的⾏保存在⼀个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的⾏,完成后把该⾏发送到屏幕上。sed每处理完⼀⾏就将其从临时缓冲区删除,然后将下⼀⾏读⼊,进⾏处理和显⽰。处理完输⼊⽂件的最后⼀⾏后,sed便结束运⾏。sed把每⼀⾏都存在临时缓冲区中,对这个副本进⾏编辑,所以不会修改原⽂件。⽐grep更强⼤,可以执⾏⼏乎所有的字符串相关的操作任务,包括添加、删除还有替换字符串的内容。# 查看⽂件的第100⾏到第200⾏sed -n '100,200p' # 替换字符串中的特定⼦串echo "int charset=gb2312 float"|sed "s/charset=gb2312/charset=UTF-8/g"# 替换test⽂件每⾏匹配ab的部分为cdsed -i 's/ab/cd/g' testawkawk,功能超级强⼤的数据处理引擎之⼀。相对于 grep 的查找,sed的编辑,awk在其对数据分析并⽣成报告时,显得尤为强⼤。awk 命令默认从 stdio 标准输⼊获取⽂件内容, awk 使⽤⼀对单引号来表⽰ ⼀些可执⾏的脚本代码,在可执⾏脚本代码⾥⾯,使⽤⼀对花括号来表⽰⼀段可执⾏代码块,可以同时存在多个代码块。 awk 的每个花括号内同时⼜可以有多个指令,每⼀个指令⽤分号分隔,awk 其实就是⼀个脚本编程语⾔。awk和sed常⽤于⽂本处理,awk按列进⾏处理,sed按⾏进⾏处理。命令语法:awk [options] 'program' fileoptions 表⽰可选参数项,program表⽰ awk 的可执⾏脚本代码,file 表⽰ awk 需要处理的⽂本⽂件。awk内置变量$0 这个表⽰⽂本处理时的当前⾏$1 表⽰⽂本⾏被分隔后的第 1 个字段列$n 表⽰⽂本⾏被分割后的第 n 个字段列NR 表⽰⽂件⾏号NF 表⽰⽂件中的当前⾏列的个数FS 表⽰ awk 的输⼊分隔符,默认分隔符为空格和制表符,你可以对其进⾏⾃定义设置OFS 表⽰ awk 的输出分隔符,默认为空格,你也可以对其进⾏⾃定义设置FILENAME 表⽰当前⽂件的⽂件名称,如果同时处理多个⽂件,它也表⽰当前⽂件名称命令实例# awk 命令的可执⾏脚本代码使⽤单引号括起花括号,⾥⾯就是⼀些可执⾏的脚本代码段,当 awk 每读取⼀⾏之后,它会依次执⾏双引号⾥⾯的每个脚本代码段。$0 表⽰当前⾏。依次将 /etc/passwd ⽂件的每⼀⾏内容打印输出awk '{print $0}' /etc/passwd# 打印输出⽂件的每⼀⾏的第 1 列内容awk '{print $1}' # 打印输出⽂件的每⼀⾏的第 1 列、第 2 列和第 3 列内容,逗号表⽰插⼊输出分隔符,也就是默认的空格awk '{print $1, $2, $3}' # 在参数列表中加⼊⼀些字符串或者转义字符,要使⽤双引号,使输出更格式化awk '{print $1 "t" $2 "t" $3}' # 显⽰⾏号和每⾏的列数,$NF即为每⼀⾏的最后⼀列,$(NF-1) 表⽰倒数第 2 列, $(NF-2) 表⽰倒数第 3 列awk '{print NR "t" NF "t" $0}' '{print $(NF - 1)}' # awk 默认分割符为空格和制表符,使⽤ -F 参数来指定⾃定义分隔符。将 /etc/passwd ⽂件中的每⼀⾏⽤冒号 : 分割成多个字段,然后⽤ print 将第 1 列字段的内容打印输出awk -F ':' '{print $1}' /etc/passwd# 通过对 $2 变量进⾏重新赋值,来隐藏每⼀⾏的第 2 列内容,并且⽤星号 * 来代替其输出awk '{$2 = "***"; print $0}' # 采⽤冒号分隔数据,输出第⼀列数据awk -F ":" '{print $1}'# 花括号{}表⽰规定它前⾯的字符必须出现的次数;⽤法和其他命令如find&grep⾮常类似。# /go{2,3}d/ 表⽰字母 "o" 只能可以出现 2 次或者 3 次# /go{2,10}d/ 表⽰字母 "o" 只能可以出现 2~10 次# /go{2,}d/ 表⽰字母 "o" 必须⾄少出现 2 次# 只匹配字符串"good";awk '/go{2}d/{print $0}' # 正则表达式中的圆括号表⽰将多个字符当成⼀个完整的对象来看待。⽐如 /th(in){1}king/ 就表⽰其中字符串 “in” 必须出现 1 次。不加圆括号就变成 /thin{1}king/ 这个就表⽰其中字符 “n” 必须出现 1 次。awk '/th(in){1}king/{print $0}' # 正则表达式中的问号 ? 表⽰它前⾯的字符只能出现0或1次awk '/ba?d/{print $0}' 上⾯都是对⼀个⽂本的操作;awk可以对多个⽂本进⾏操作,变量 FILENAME 表⽰当前⽂本⾏所在的⽂件awk '{print FILENAME "t" $0}' 使⽤数学运算&条件判断~ 匹配正则表达式!~ 不匹配正则表达式# 先声明两个变量,然后⽤ print 打印出计算结果;awk针对⽂件的每⼀⾏执⾏⼀次单引号⾥⾯的脚本代码,但 BEGIN 和 END 关键字后⾯的 脚本代码除外,如果被处理的⽂件中什么都没有,那 awk 就⼀次都不会执⾏awk '{a = 12; b = 24; print a + b}' # 判断⽂件的第 3 列数据,满⾜条件则打印输出awk '$3 < 500 {print $0}' '{if ($3 < 500) print $0}' '$1 == "yahoo" {print $0}' 在awk的结果基础上,结合sort、uniq和head等命令可以轻松完成频率统计等功能。要知道还有书籍专门讲解awk命令使⽤,算得上是⼀门编程语⾔,还有很多功能有待开发使⽤。ag⽐grep、ack更快的递归搜索⽂件内容。ag ‘hello wor’,⾮精确匹配;参考

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690360687a337730.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信