find/pg/grep/sed/awk命令简析

来源:岁月联盟 编辑:exp 时间:2012-04-12

find/pg/grep/sed/awk命令简析 Java代码  <span style="color: #0000ff;"><strong>【【【find 介 绍】】】</strong></span>  find pathname -options [-print -exec -ok ...]      -print: find命令将匹配的文件输出到标准输出。        当前目录下查找文件权限位为 7 5 5的文件      $ find . -perm 755 -print        当前目录及子目录中查找文件名以一个大写字母开头的文件      $ find . -name "[A-Z]*"        希望在系统根目录下查找更改时间在 5日以内的文件      $ find / -mtime -5 -print        为了在/var/adm目录下查找更改时间在 3日以前的文件      $ find /var/adm -mtime +3 -print        查找除目录以外的所有类型的文件,可以用:      $ find . ! -type d   www.2cto.com       【b-块设备文件;d-目录;c-字符设备文件;p-管道文件;l-符号链接文件;f-普通文件】        当前目录下查找文件长度大于 4K 字节的文件,可以用:      $ find . -size +4000c        find命令从文件系统的根目录开始,查找一个名为 CON.FILE的文件。      它将首先匹配所有的文件然后再进入子目录中查找      $ find / -name "CON.FILE" -depth        当匹配到一些文件以后,可能希望对其进行某些操作:      查找更改时间在 5日以前的文件并删除它们      find / -type f -mtime +5 -exec rm {} /;        exec选项后面跟随着所要执行的命令,然后是一对儿 { },一个空格和一个 /,最后是一个分号        为了查找系统中所有文件长度为 0的普通文件,并列出它们的完整路径,可以用:      $ find / -type f -size 0 -exec ls -l {} /;        日志文件名的最后含有数字,这样我们一眼就可以看出哪个文件是最新的,哪个是最旧的。      Admin.log 文件编上了序号:admin.log.001.admin.log.002等等。      下面的find命令将删除 /logs目录中访问时间在 7日以前、      含有数字后缀的 admin.log文件。该命令只检查三位数字,所以相应日志文件的后缀不要超过999。      $ find /logs -name 'admin.log[0-9][0-9][0-9] e +7 -exec rm {} /;        查找当前文件系统中的所有目录并排序,可以用:      $ find . -type d -print -mount |sort        为了查找系统中所有的 rmt磁带设备,可以用:      $ find /dev/rmt    <span style="color: #0000ff;"><strong>【【【pg 介 绍】】】--page</strong></span>  pg  [option]  filename      分页显示指定文件的内容。在显示一页文件时,最后一行将显示等待用户输入指令      [option]:可输入的指令有如下选项。        h                           this screen        q or Q                  quit program        <newline>          next page        f                            skip a page forward        d or ^D                next halfpage        l                             next line        $                            last page        /regex/                 search forward for regex        ?regex? or ^regex^      search backward for regex        . or ^L                  redraw screen        w or z                   set page size and go to next page        s filename           save current file to filename        !command           shell escape    www.2cto.com        p                            go to previous file        n                            go to next file      注释:当pg命令显示到文件的末尾时,显示一个文件结束信息EOF(end of file)。      例如:% pg filename      <span style="color: #0000ff;"><strong>【【【grep 介 绍】】】</strong></span>  grep [keyword] [options] filename      [options]主要参数:          -c:只输出匹配行的计数。          -i:不区分大 小写(只适用于单字符)。          -h:查询多文件时不显示文件名。          -l:查询多文件时只输出包含匹配字符的文件名。          -n:显示匹配行及行号。          -s:不显示不存在或无匹配文本的错误信息。屏蔽错误!          -v:显示不包含匹配文本的所有行。排除!      pattern正则表达式主要参数:          /: 忽略正则表达式中特殊字符的原有含义。          ^:匹配正则表达式的开始行。          $: 匹配正则表达式的结束行。          /<:从匹配正则表达 式的行开始。          />:到匹配正则表达式的行结束。          [ ]:单个字符,如[A]即A符合要求 。          [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。          . :所有的单个字符。          * :有字符,长度可以为0。    【grep】和【sed】命令中,同时结合 {//}(以字符出现情况进行匹配的元字符)使用在 【awk】语言中。      ^        只匹配行首---$ ls -l |grep ^-      $        只匹配行尾---$ ls -l |grep k$      *        只一个单字符后紧跟 *,匹配0个或多个此单字符      []        只匹配 [ ]内字符。可以是一个单字符,也可以是字符序列。可以使用                表示[]内字符序列范围,如用 [1-5]代替[12345]      /        只用来屏蔽一个元字符的特殊含义。因为有时在 s h e l l中一些元字符有                特殊含义。 /可以使其失去应有意义      .        只匹配任意单字符:        【5,6字符为XC: ....XC....】      pattern/{n/}    只用来匹配前面 pattern出现次数。 n为次数      pattern/{n,/}m    只含义同上,但次数最少为 n   www.2cto.com       pattern/{n,m/}    只含义同上,但 pattern出现次数在 n与m之间    类        等价的正则表达式    类        等价的正则表达式  [[:upper:]]    [A-Z]        [[:alnum:]]    [0-9a-zA-Z]  [[:lower:]]    [a-z]        [[:space:]]    空格或tab键  [[:digit:]]    [0-9]        [[:alpha:]]    [a-zA-Z]    在一个目录中查询不包含目录的所有文件:$ ls -l |grep '^[^d]'    ********************************************************************************  <span style="color: #0000ff;"><strong>【【【sed 介 绍】】】</strong></span>Sed(Stream EDitor)为 UNIX 系统上提供将编辑工作自动化的编辑器  sed [-nefri] command 输入文本     1.使用sed命令行格式为:    sed [选项] sed命令 输入文件  2.使用sed脚本文件格式为:    sed [选项] -f sed脚本文件 输入文件  3.使用第一行具有 sed命令解释器的sed脚本文件,其格式为:    sed脚本文件 [选项] 输入文件      常用选项:       -n∶ 使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。         但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。       -e∶ 直接在指令列模式上进行sed的动作编辑;$ sed -e '1,5d' -e 's/test/check/' example       -f∶ 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;       -r∶ sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)       -i∶ 直接修改读取的档案内容,而不是由萤幕输出。  sed -e '编辑指令 1' -e '编辑指令 2' ... 文件档    替换标记:      g:表示行内全面替换。      p:表示打印行。      w:表示把行写入一个文件。w file      x:表示互换模板块中的文本和缓冲区中的文本。      y:表示把一个字符翻译为另外的字符(但是不用于正则表达式)   $ sed -e '/info/w tofile' fromfile  $ sed '1,3w wfile' rfile    #写入文件wfile,屏幕显示rfile内容      常用命令:(command)        a--append  ∶新增,a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~        c--change  ∶改变,c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!        d--delete  ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;        i--insert  ∶插入,i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);        p--print     ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~        s--substuite  ∶替换,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g   www.2cto.com   $ sed '1,3a drink tea' file    #第一行到第三行后增加字符串"drink tea"  $ sed '1,2c Hi' file        #第一行到第二行代替为一行"Hi"  $ sed '2,$d' file        #删除第二行到最后一行  $ sed -i '8,$i bye' file    #在文件file中第八行到最后行每行间插入一行"bye"  $ sed -n '5,9p' file        #在屏幕中显示出5到9行的内容(!没有<-n>时5~9行重复列出!)  $ sed -n '5,9!p' file        #'!'取反  $ sed -e 's/test/& my car/' file     #"test" 被替换成 "test my car"  $ sed -e 's/(test) (my) (car)/[2 3 1]/' file    #  $ sed '/显示/s/info/信息/g' file1 file2   #文件中含“显示”的行中"info"替换为"信息"。                      #若没有'g',则只有每行的第一个'info'被替换为"信息"。                      (紧跟着s命令的都被认为是新的分隔符)  $ sed -e '/^$/d' file    #删除全部空行  $ sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' file    #小写字母改成大写  $ sed -n -e 'n' -e 'p' file        #输出偶数行  $ sed -n -e 'N' -e 'P' file        #输出奇数行  $ sed -e '/日期/q' -e '1,3d' file    #遇到有‘日期’的行则不再处理显示文件以后的内容  $ sed -n '=' file    #只打印出行号  $ sed -e '=' file    #行号+行内容  --------------------------------------------------  file:  12321##FDGH##45.12^M  00325##GJSD##32.56^M  02556##GFGF##98.52^M  1) 用一个空格替换所有的( ##)符号;  2) 删除起始域中最前面的 0(00);  3) 删除行尾控制字符( ^M);  $ sed 's/##/ /g' file  $ sed 's/^0*//g' file  $ sed 's//^M//g' file  $ sed -e 's/##/ /g' -e 's/^0*//g' -e 's//^M//g' file  ----------------------------------------------------  ********************************************************************************  <span style="color: #0000ff;"><strong>【【【awk 介 绍】】】</strong></span>  awk [-f separator] 'commands' input-file(s)   www.2cto.com   awk  'BEGIN{actions}{actions;actions……}……END{actions}'  inputfile  **其中BEGIN{actions}和END{actions}是可选的!!BEGIN,END必须为大写!!!!      **如果不特别指明模式, awk总是匹配或打印行数      **实际动作在大括号 {}内指明      **如果不指明采取动作, awk将打印出所有浏览出来的记录      **浏览域标记为 $1,$2 . . . $n(用逗号分隔域),所有域为:$0      **打印一个域或所有域,使用 print命令  $ awk '{print $1,$2,$3}' script.txt        #不保存文件,屏幕显示输出结果  $ awk '{print $1,$2,$3}' script.txt>outfile.txt    #保存到文件,屏幕不显示输出结果  $ awk '{print $0}' script|tee outfile.txt    #保存到文件,屏幕显示输出结果  $ awk 'BEGIN{print "aa/tbb/n----------------"} {print $1"/t"$2} END{print"end of report"}' script.txt     &&    AND:语句两边必须同时匹配为真。  ||    OR :语句两边同时或其中一边匹配为真。  !    非 :求逆    ~  匹配正则表达式  !~ 不匹配正则表达式    $ awk '$2~/政法/{print $0}' script.txt  $ awk '$2~/政法学院/' script.txt  $ awk '$2=="政法学院" {print $0}' script.txt  $ awk '{if($2~/政法学院/)print $0}' script.txt    【awk内置变量】  ARGC    --命令行参数个数  ARGV    --命令行参数排列  ENVIRON    --支持队列中系统环境变量的使用  FILENAME--awk浏览的文件名   www.2cto.com   FNR    --浏览文件的记录数  FS    --设置输入域分隔符,等价于命令行 -F选项  NF    --浏览记录的域个数  NR    --已读的记录数  OFS    --输出域分隔符  ORS    --输出记录分隔符  RS    --控制记录分隔符  【awk内置字符串函数】  gsub(r,s)    在整个$0中用s替代r----$ awk 'gsub(/1002/,1102){print $0}' file  gsub(r,s,t)    在整个t中用s替代r----$  index(s,t)    返回s中字符串t的第一位置----$ awk 'BEGIN {print index(hello,el)}' file  length(s)    返回s长度----$ awk '$1=="kk"{print length($1)"  "$1}' file  match(s,r)    测试s是否包含匹配 r的字符串----$ awk 'BEGIN {print match("hello",/e/)}' file  split(s,a,fs)    在fs上将s分成序列a----$ awk 'BEGIN {print split("0461-3205-1656",array,"-")}' file  sprint(fmt,exp)    返回经fmt格式化后的 exp----$  sub(r,s)    用$0中最左边最长的子串代替 s----$ awk '$1=="kk" substr($1,1,5)' file  substr(s,p)    返回字符串 s中从p开始的后缀部分----$ awk 'BEGIN {print match("hello",/e/)}'  substr(s,p,n)    返回字符串 s中从p开始长度为 n的后缀部分----$  【awk中使用的屏蔽序列】  /b    退格键  /f    走纸换页  /n    新行  /r    回车键  /t    tab键  /ddd    八进制值  /c    任意其他特殊字符,例如 //为反斜线符号  【awk printf修饰符】  -    左对齐   www.2cto.com   Width    域的步长,用 0表示0步长  .prec    最大字符串长度,或小数点右边的位数  【awk printf格式】  %c    ASCII字符---$ echo "65" |awk '{print "%c",$0}'  %d    整数---  %e    浮点数,科学记数法---  %f    浮点数,例如( 123.44)---  %g    awk决定使用哪种浮点数转换 e或者f---  %o    八进制数---  %s    字符---  %x    十六进制数串---     作者 185800961