find_pg_grep_sed_awk

本文介绍了find、pg、grep、sed、awk等常见Linux命令的基本用法和高级技巧,包括如何查找文件、分页显示文件内容、搜索文本、文本流编辑以及强大的文本处理能力。
【【【find 介 绍】】】
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
    【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

【【【pg 介 绍】】】--page
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
      p                            go to previous file
      n                            go to next file
    注释:当pg命令显示到文件的末尾时,显示一个文件结束信息EOF(end of file)。
    例如:% pg filename


【【【grep 介 绍】】】
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
    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]'

********************************************************************************
【【【sed 介 绍】】】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
$ 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
----------------------------------------------------

********************************************************************************
【【【awk 介 绍】】】
awk [-f separator] 'commands' input-file(s)
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浏览的文件名
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修饰符】
-    左对齐
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    十六进制数串---
 

 

[apply] ignorewhitespace = change whitespace = nowarn [push] default = upstream rebase = true followTags = true [color] interactive = true branch = true status = true [core] mergeoptions = --no-edit pager = less -FiR # -F is necessary but has problems with tmux and regular shells #pager = most excludesfile = /home/braulio/.gitignore #pager = vimpager #pager = more -p [mergetool "vimdiff3"] cmd = vim -u ~/.vimrc -f -d -c \"wincmd J\" \"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\" [alias] root = rev-parse --show-toplevel #cdroot = !cd `git root` out = log --branches --not --remotes in = pull --dry-run co = checkout coc = checkout . cob = checkout -b cobf = "!f() { git brd $1; git cob $1; }; f" col = checkout HEAD~1 cotc = !git sttc | xargs git checkout como = !git stmo | xargs git checkout ours = checkout --ours theirs = checkout --theirs aours = "!f() { (git reset $* >/dev/null); git ours $* && git add $*; }; f" atheirs = "!f() { (git reset $* >/dev/null); git theirs $* && git add $*; }; f" ci = commit cif = "!f() { vim $1; git ci $1; }; f" cie = commit --allow-empty cia = commit -a cam = commit --amend cama = commit --amend -a cl = clean cldf = clean -df res = reset resa = reset HEAD resh = "!f() { git stash && git reset --hard $@; }; f" reshu = !git resh `git upstream` reshfu = !git fetch `git upstream-remote` && git resh `git upstream` reshh = !git stash && git reset --hard HEAD cundo = reset HEAD^1 cundoh = !git stash && git reset HEAD^1 --hard unstage = reset HEAD tags = tag -l pg = diff pgs = diff --staged pa = apply s = show --color sw = show --color --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+' sf = show --color -C --stat d = diff --color dw = diff --color --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+' du = !git d `git upstream` $@ ds = !git d --staged $@ dsf = !git d --staged --stat $@ dsw = !git d --staged --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+' $@ dsf = !git d --staged -C --stat $@ df = !git d -C --stat $@ dc = "!f() { HASH=$1; shift 1; git diff --cc $HASH $HASH^1 $HASH^2 $@; }; f" lp = log -m --color -p lf = log -m --color -C --stat lg = log -m --simplify-merges --color --graph --pretty=format:'%Cred%h%Creset %s %Cgreen(%ar) %Cblue%an <%ae>%Creset' --abbrev-commit --date=relative lgu = !git lg `git upstream` $@ lg2 = !source ~/.githelpers && pretty_git_log lgp = !git lg -p $@ lgpw = !git lg -p --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+' $@ lgf = !git lg -C --stat $@ l = log -m --simplify-merges --color --pretty=format:'%Cred%h%Creset %s %Cgreen(%cr) %Cblue%an <%ae>%Creset' --abbrev-commit --date=relative lc = "!f() { git log $* | grep '^commit ' | cut -f 2 -d ' '; }; f" lgu = !git lg --no-merges `git upstream` $@ lgup = !git lg --no-merges -p `git upstream` $@ f = fetch fu = !git fetch `git upstream-remote` $@ fa = fetch --all fo = fetch origin m = merge --no-edit unm = reset --merge ps = push psu = push -u psn = "!f() { git ps $1 `git brc`; }; f" psnf = "!f() { git psf $1 `git brc`; }; f" psfun = "!f() { git psu -f $1 `git brc`; }; f" psun = "!f() { git psu $1 `git brc`; }; f" pso = push origin psoun = !git psu origin `git brc` $@ psf = push -f psuf = push -uf pssm = push --recurse-submodules=on-demand psremoveallbranches = "!f() { git push $1 `git brar $1 | grep -v master | xargs -I {} echo :{}`; }; f" pl = pull plo = pull origin plom = pull origin master plr = !git sh && git pull --rebase && git shp $@ st = status sttc = !git status | grep typechange | awk '{print $2}' $@ stmo = !git status | grep modified | awk '{print $2}' $@ a = add --all af = add --all -f ap = add -p resolve-unmerged = !git add `git unmerged` $@ add-untracked = !git add `git untracked` $@ as = !git diff -w --no-color | git apply --cached $@ rs = !(git resa && git as && git co . && git resa) &>/dev/null rmf = rm -rf rmtheirs = !git rm `git removedbytheirs` $@ rmours = !git rm `git removedbyours` $@ unmerged = !git ls-files --unmerged | cut -f2 | uniq theirsunmerged = !git ls-files --unmerged | grep \"\\\\s3\\\\s\" | cut -f2 | uniq oursunmerged = !git ls-files --unmerged | grep \"\\\\s2\\\\s\" | cut -f2 | uniq removedbyours = !bash -c 'source ~/.githelpers && diff_array \"`git theirsunmerged`\" \"`git oursunmerged`\"' removedbytheirs = !bash -c 'source ~/.githelpers && diff_array \"`git oursunmerged`\" \"`git theirsunmerged`\"' untracked = ls-files --other --exclude-standard staged = ls-files --staged modified = ls-files --modified deleted = ls-files --deleted gitignored = ls-files -o -i --exclude-standard sig = !git ls-files -v | grep "^[[:lower:]]" ig = update-index --assume-unchanged uig = update-index --no-assume-unchanged ignore = update-index --assume-unchanged ignored = !git sig $@ gitignore-untracked = !git gitignore `git untracked` $@ ig-untracked = !git ignore `git untracked` $@ gitignore = !cd `git root` && touch .gitignore head = !git l -1 $@ h = !git head $@ hp = !source ~/.githelpers && show_git_head r = !git l -20 $@ ra = !git r --all $@ sh = stash shp = stash pop shl = stash list shd = stash drop shc = stash clear sha = stash apply chp = cherry-pick chpc = cherry-pick --continue chpq = cherry-pick --quit chpa = cherry-pick --abort rv = revert rvc = revert --continue rva = revert --abort am3 = am -3 amr = am --resolved amc = am --continue ama = am --abort ams = am --skip fm = format-patch rb = rebase rbad = rebase --committer-date-is-author-date rbi = rebase -i rbtc = !git theirs `git unmerged` || git resolve-unmerged && (git rbc || git rbs) rboc = !git ours `git unmerged` || git reset `git unmerged` && git a . && (git rbc || git rbs) rbc = rebase --continue rba = rebase --abort rbs = rebase --skip squash = !"f() { NL=$1; GIT_EDITOR=\"sed -i '2,$NL s/pick/squash/;/# This is the 2nd commit message:/,$ {d}'\"; git rebase -i HEAD~$NL; }; f" sq = !git squash $1 sqpsf = !git squash $1 && git psf bs = bisect bsr = bisect reset bsb = bisect bad bsg = bisect good mt = mergetool vm = !vim `git unmerged` vmo = !vim `git modified` vt = !vim `git untracked` vim-unmerged = !git vm # deprecated current = rev-parse --abbrev-ref HEAD br = branch brc = rev-parse --abbrev-ref HEAD brt = branch --track brup = branch --set-upstream bra = !git branch -a | less -FiRS brrecent = !git for-each-ref --sort=-committerdate refs/heads/ brar = "!f() { git bra | grep remotes/$1/ | cut -f 3 -d '/'; }; f" brd = branch -D brco = branch --contains brcommits = "!f() { git lc --branches=$1* }; f" brdiff = !source ~/.githelpers && diff_branches brfdiff = !source ~/.githelpers && diff_branches_show_files rem = remote rema = remote add remr = remote rm remv = remote -v remotes = remote -v sm = submodule smst = submodule --status sma = submodule add smu = submodule update sme = submodule foreach smepl = submodule foreach "(git checkout master; git pull)&" smui = submodule update --init smuir = submodule update --init --recursive smd = submodule deinit sms = submodule sync smpl = submodule foreach git pull origin master bl = blame gcp = gc --prune=now gca = gc --aggressive gcap = gc --aggressive --prune=now # git change-commits GIT_COMMITTER_NAME "old name" "new name" change-commits = "!f() { VAR=$1; OLD=$2; NEW=$3; shift 3; git filter-branch --env-filter \"if [[ \\\"$`echo $VAR`\\\" = '$OLD' ]]; then export $VAR='$NEW'; fi\" $@; }; f " # from https://help.github.com/articles/remove-sensitive-data remove-file = "!f() { git filter-branch -f --index-filter \"git rm --cached --ignore-unmatch $1\" --prune-empty --tag-name-filter cat -- --all; }; f" rf = reflog rfe = reflog expire --expire=now --all pr = prune prm = !git rfe && git gcp fsize = git ls-tree -r -t -l --full-name HEAD | sort -rn -k 4 | less findemptydirs = !"find . -type d -empty ! -path ./tmp/\\*" deleteemptydirs = !"find . -type d -empty ! -path ./tmp/\\* -exec rmdir {} \\;" ### specifics mps = "!f() { cd ../$1; git m master; git ps; }; f" cmps = "!git mps cirandas" bmps = "!git mps blogoosfero" nghs = "!git f noosfero; git ps ghnoosfero noosfero/master:master" [url "https://"] insteadOf = git://
07-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值