linux下查找文件及文件內查找內容--find/grep/sed/awk


1.find  查找到想要的文件或目錄

  格式:find  [path]   [-OPTION]  [-exec |grep  |xargs   -ok  -print   | ……]   [command  {} \;]

  參數:

    -type    以類型查找

      f    文件

      d   目錄

    -name    以文件名查找

    -size    根據問價大小來查找。eg:  find /data -size 5M

    -perm    根據文件權限查找。  eg: find /data -perm 755

    -maxdepth n   顯示的最大層數。(這個參數通常放在第一個,否則的話會有警告信息)。  eg: find /data/  -maxdepth 2  -type d

    -exec command {} \;     對匹配的文件執行該參數給出的命令。形式為  command {} \;

    -ok    與-exec作用相同。區別在於,執行命令之前,都會給出提示,讓用戶確認是否執行。

    -mtime -n/+n    根據修改時間找出對應的文件。-n指n天以內;+n指n天以前。天數前面必須要有加號或減號,否則不會有查找結果。

      eg:find  -type f -name "*.log" -mtime +7|xargs  ls -l     或   ls -l $(find -type f -name "*.log" -mtime 7)    或   find -type f -name "*.log" -mtime 7 -exec ls -l {} \;

    !  取反。注意:符號前后至少一個空格。  eg:  find /data  -maxdepth 2 -type d ! -name "."

    find不加任何參數-----顯示當前目錄下的所有文件(包括子目錄及子目錄內的文件)

2.grep  過濾。在文件中找到想要的內容

  格式:grep  參數  查找用的關鍵字符    文件名

  參數:

    -v     排除。  eg:grep -v  "num"  test.txt    將test.txt文件內,非包含num字符的 行 顯示出來

    -An  將匹配到的字符所在行顯示出來,並顯示次行下面的n行。  eg:grep A15  “num” test.txt     將test.txt文本內,匹配到num字符的行顯示,並顯示此行下面15行

    -n    顯示匹配到的字符所在的行內容,及其行號。

    -o    顯示grep的執行過程,即每次匹配到的內容。涉及到正則的話,就是正則每次匹配到的內容。 

    egrep    支持高級正則。相當於grep -E

3.sed  取行。多用於替換。默認會顯示文件的全部內容。也可用於查找內容(這個用的比較少)

  格式:sed 參數 匹配行/替換/查找的字符  文件名

  參數:

    -n    取消默認輸出。即取消默認顯示全部內容,一般與p搭配使用。

    -r    表示支持擴展正則。

    -i    修改文件內容

    eg:

   取行:sed -n '20,30p'  test.txt     顯示test.txt文件第20行到第30行的內容。

      sed -n '20p'   test.txt    顯示test.txt文件第20行的內容。

      sed -n '3,$p' test.txt   顯示第3行到最后一行。

      

 

 

      注意:顯示前多少行或后多少行,可以用head或tail命令。搭配sed顯示具體的某行或區間行。關於行的顯示查看就能完全搞定。

   替換:sed -i 's#找誰#替換為什么#g'  test.txt      eg:   sed  -i  's#nm#DDD#g'  test.txt    將test.txt文件內的nm全部替換為DDD

        注:替換時sg中間的三個符號,什么都可以,但是一般常用@或#,即s@@@g或s###g

      搭配find可替換多個文件內容:

      find /data/ -type f  -name "*.sh" |xargs  sed -i 's#abc#kpl#g'      找出/data文件夾內所有以.sh結尾的文件,替換所有文件內的abc為kpl.

      sed -n '2s#abc#123#gp' test.txt    將第2行的abc替換為123,顯示出來。  這里若是加-i的話,則會用處理的結果行替換整個文件的內容,如:sed -n '2s#abc#123#gp' test.txt  -i  ,則會把第2行中的abc全部替換為123后,清空文件,寫入第2行內容,見下圖:

          ‘=’表示給每行加行號

 

       替換具體某一行內容時,不能加p參數,只要-i即可,否則會出錯,會多出一行來。這里還需要再研究研究:

      sed  -i ‘2s#abc#123#g’  test.txt   這樣沒有參數p,會正常的將第2行abc替換為123.

      sed  -i  '2s#abc#123#gp'  test.txt    這樣的有參數p,會在替換后多出一行來,內容和第2行一致.見圖:

      

 

    查找:sed  -n '/abc/p'   test.txt    將文件內包含abc的行顯示.

      sed '/abc/d'  test.txt    將文件內沒有包含abc字符的行,均顯示出來(這里如果加-n的話就什么都不顯示)。-----一般根據字符查找行用grep,sed這樣用起來不方便,也用的少.

      

 

 

4.awk       取列。取行。計算。

  格式:awk   參數   取行/取列/查找的字符  文件名

  awk  ‘找誰{做什么}’  文件   eg:awk  ‘NR==2{print $3}’  test.txt   取出test.txt文件第2行的第3列內容

  參數:

    -F     指定分隔符(未指定時,默認空格作為分隔符)。 eg:awk  -F ”,“  ‘{print $3}’  test.txt  用逗號作為分隔符,顯示第3列

    -F "[ ,]"    指定多個分隔符。   eg:awk  -F "[ ,]"  '{print $3,$5}'  test.txt    用逗號或者空格作為分隔符,顯示第3列和第5列

    -F "[ ,]+"   指定多個分隔符。這里的+號表示,以連續出現的空格或逗號作為分隔符。

    $n   第n列

    $0   表示一整行的內容

    NR   表示行號

    {print }   

  取列:

    awk ‘{print $3]’ test.txt   顯示第3列

    awk '{print $2,$6}' test.txt    顯示第2列,第6列

    awk '{print $2"  ,aa"$4}'  tets.txt    顯示第2列,第4列。大括號內,雙引號里的內容會原封不動的輸出。

  取行:

    awk ‘NR==20,NR==30’  test.txt   顯示第20行到第30行

    awk ‘NR==20’  test.txt   顯示第20行

  查找:

    awk '/123/'  test.txt   顯示文件內包含123字符的行

    awk  ‘!/123/’   test.txt    顯示文件內不包含123字符的行

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM