文本處理工具和shell腳本基本編程

文本處理工具

grep 對文本進行搜索
獲取我們想要的行(關鍵信息)

egrep 支持擴展正則表達式的grep

fgrep 快速搜索
不支持正則

 

 -v 取反  找出不包含“pattern”的行

 -i 忽略字符的大小寫

 -n 顯示行號

 -c 顯示統計到的行數,等同于wc -l

 -o 僅顯示匹配到的字符串

 -q 靜默輸出  只關心命令的執行結果 不關心輸出結果

 -A 后幾行

 -B 前幾行

 -C 前后幾行  查看日志 搜索關鍵字排查錯誤的時候

 -e 指定多個條件,條件是或的關系

 -w 匹配整個單詞

 -E
=== egrep
支持擴展的正則表達式

 -F
=== fgrep
不支持正則表達式

例子如下:

文本處理工具和shell腳本基本編程

 

grep 正則表達式

. 單個字符

[abc] a | b | c

[^abc] abc之外的字符

[:alnum:] 數字和字符

[:alpha:] 英文大小寫字符 a-z A-Z

[:lower:] 小寫字母

[:upper:] 大寫字母

[:space:] 專門匹配空格

* 匹配前面的字符任意次,0 到無窮

.* 任意字符出現任意次,比如說 123 456 abc

a* a字符出現任意次   aaaa aa

[[:lower:]]* 任意小寫字母出現任意次

\? 匹配前面的字符出現0次或者1 

       a\? 出現0次或者1

\+ 匹配前面的字符至少1 

   
a\+ a
至少出現1

\{n\} 前面的字符出現n

  
[0-9]\{3\} 000-999

 

\{m,n\}匹配前面的字符出現mn次,m,n是一個范圍

 
[0-9]\{1,3\} 0-999

\{,n\}匹配前面的字符最多出現n

  
[0-9]\{,3\}
最大匹配是999

 \{m,\}匹配前的字符至少出現m

  
[0-9]\{3,\} 000
無窮

 

  位置錨定 用來定位字符出現的位置

  ^ 錨定行首

  $ 錨定行尾

    
^$
匹配空行的

    
^[[:space:]]
行首是空白的字符

    
^[[:space:]]*$
也是 空行

    
^a 
a開頭的行

    
b$ 
b結束的行

    
^a.*b$
a開頭 中間任意字符 以b結尾的行

    
^a.*[[:space:]]\{3\}.*b$ a
開頭跟任意字符,中間出現三次空格再跟任意字符
b結尾的行

    
^#
#開頭的行

    
cat /etc/profile | grep -v “^#” | grep -v “^$”

    
cat /etc/httpd/conf/httpd.conf  |
grep -v “^#” | grep -v “^$”

 

 \b  \b 匹配詞首和詞尾

 \< 
\>
匹配詞首和詞尾

 \broot\b 
\<root\>

 

vim編輯器

 

三種模式 打開之后默認是一般模式 | 命令模式

                       插入模式 | 編輯模式

                       末行模式 | 擴展模式(extend | 命令行模式

 

 

      一般模式  i   編輯模式

            
i I a A o O  
用的比較多的是 i o O  

      編輯模式  esc 一般模式

 

      一般模式    末行模式

             : ?其中: / 用的比較多的

      末行模式  q  結束

             q 退出

             q! 強制退出,不保存修改的內容

             wq  保存退出

             x   保存退出

一般模式下 ZZ ZQ

        上下左右鍵移動

       
10 –>

       
10 <–

       
10
向下

       
10
向上

       
w
單詞間跳轉

       
10w
向下跳10個單詞  

       
H
頁首

       
M
頁中間

       
L
頁底

 

        行首行尾

         
^
跳至行首 非空白字符

         
$
跳至行尾

         
0
跳到行首

 

        
G
最后一行

        
gg
第一行 1G

 

         句子之間移動  (上  )下

         段落之間移動   {  } 向下移動

 

 

        
Ctrl+d:
向文件尾部翻半屏

        
Ctrl+u
:向文件首部翻半屏

 

        字符的刪除

        
x
刪除字符

        
10x
刪除10個字符

 

         替換模式

         r  替換當前字符

        
進入替換模式,替換完之后按esc鍵退出

 

        
dd
刪除光標所在當前行

        
10dd
刪除10

         刪除半行

           
d$
刪除光標處到行尾

           
d^ d0
刪除光標處到行首

           
dw de
刪除一個單詞

           
x
多按幾次

 

           
d1G
刪除光標到第一行的數據

           
dG
刪除光標到最后一行的數據

            二者結合可以刪除整個文件里面的內容

 

 

            刪除文件全部內容 先跳到最后一行 G

                             然后執行d1G

           

            復制粘貼

           
yy  —> p

           
y$
復制光標處到行尾的

           
y0 y^
復制光標到行首的 注意空白字符和非空白字符的區別

           
ye yw
復制單個字符

  

     
      
粘貼

              p 粘貼到當前行的下一行

              P 粘貼到當前行的上面一行

 

 

            
相當于執行了x然后再執行i 進入編輯操作

            
c$
刪除光標處到行尾的內容 然后進入編輯模式

            
c^ c0
刪除光標處到行首的內容,刪完進入編輯模式

            
cb ce cw
刪除一個單詞之后進入編輯模式

            
cc
刪除一行之后直接進入編輯模式

 

文件查找和壓縮

find:根據我們指定的內容或者條件在系統上進行實時查找

最新 最快 最精確

使用場景 我想查找某個文件名叫 server.xml /apps/data/目錄下

         我想查找某個目錄下文件大小超過10G的日志

 

 

 find .        
-name “baoding.log”     
-print

     查找路徑      查找條件             找到之后執行的動作

 

 find . -name “baoding.log”  默認動作 標準輸出,輸出到當前屏幕上

 

 查找條件

     -name 可以使用通配符 比如 * ? [] [^]

        find . -name “????.log”

     -iname 文件名稱忽略大小寫

          find
. -iname “baoding.log”

  

     -inum n 根據inode來查找 (基本不用)

       find . -inum 1179826

     -samefile name  查找相同inode號的文件,其實等于查找硬鏈接(基本不用)

 

     -links n 根據鏈接數

        find . -links 2

     -regex 使用正則表達式的方法匹配文件名

        find /etc/ -regex “.*\.sh$”

 

   根據屬主和屬組來查找

     -user 
-group -uid -gid

     -nouser 查找沒有屬主的文件或者目錄

     -nogroup 查找沒有屬組的文件或者目錄

     測試方法:新建一個ash用戶,然后把一個文件的屬主和屬組改成ash

              然后再刪除ash用戶

  

    根據文件類型:

        -type f 普通文件

              d 目錄

              l 鏈接文件

              s 套接字文件

              b 塊設備

              c 字符設備

              p 管道

 

 

    根據文件大小來查找

         -size + 大于多少的文件

             k M G

         -size – 小于多少的文件

             k M G

         -size   等于多少的文件

             k M G

 

    根據時間來查找

        -mtime +7 7天以前的  從第8天開始

        -mtime 7  當前時間往前推第7

        -mtime -7  當前時間往前推第7天以內

 

 

        ——10–9–8        7——5—3–2—1

        mtime +7     mtime 7 
mtime -7     
 

 

        以分鐘為單位  -amin  -cmin(少用)

            -mmin +7  -7  7

 

     根據權限來查找(基本不用的)

        -perm 755 精確匹配有755權限的文件

        -perm -222 必須包含全部的222權限才可以

        -perm +222(CentOS 6)

              /222(CentOS 7)

              只要有一個比如說屬主 屬組或者其他人有一個擁有寫權限即可

 

幾種壓縮工具的用法

compress

   compress file 會生產file.Z壓縮文件,同時會刪除源文件

   compree -c file > file.Z 將壓縮結果輸出到標準屏幕上,可以一個(壓縮)文件,從而達到生產壓縮文件

                            同時保留源文件

   compress -d 
解壓縮 .Z格式結尾的壓縮文件
=== uncompress

   zcat file.Z 直接查看壓縮文件的內容不用先解壓縮

 

 

 gzip  壓縮比1–9  默認是6  壓縮比越高  耗費CPU資源也多

                     文件比較小的話,使用gzip越壓縮越大

                     nginx gzip on

                     gzip_min_length 1k;     超過多大的文件(1K)才會壓縮

        -d 解壓縮   == gunzip

        -c 將壓縮或者解壓縮結果輸出到屏幕

 

  bzip2 

       -k 保留源文件

       -d 解壓縮  == bunzip2

       -# 指定壓縮比

       bzcat file

 

    xz 要取代gzip
bzip2的命令  壓縮的更徹底

       -k 保留源文件

       -d 執行解壓縮

       -# 指定壓縮比

     xzcat 直接查看壓縮文件內容

 

    zip  打包壓縮(可以壓縮目錄)

       -r 遞歸壓縮

        unzip 解壓縮

             -p 將壓縮結果輸出屏幕上

 

    tar 打包工具,將多個目錄打包成一個文件

        -c 打包 創建打包文件(歸檔)

        -f 指定打包的文件名

          -f filename 必須放在一起

        -r 將文件追加至歸檔文件中

        -t 不解壓的情況下直接查看歸檔文件里面的內容

    

     常用選項:-cf  -rf -tf

 

        -x 執行解壓縮

        通常和-v(顯示解壓縮過程) -f結合使用

 

        -C 解壓到指定目錄

 

shell腳本的編程

Shell腳本
 過程式 解釋語言

 組成:

    變量

    命令

    控制語句(if,for,while)

 

 

首行的固定寫法:

#!/bin/bash

#!/bin/sh

告訴系統執行的時候要調用什么解釋器。

如果首行不寫,執行的時候需要使用命令bash

 

shell腳本的寫法:

   注釋說明:

       #!/bin/bash

                   #

                   #Filename:BeiFen.sh

                   #Description:Test

                   #Author:Li Nan

                   #Email:xxx@126.com

                  #Revision:3.1

                   #Date:20170407

                   #Note:Test

  每一行之前最好有一個注釋

  腳本名稱使用.sh結尾的

  盡量避免使用中文

  # 表示注釋 此行不執行

 

  腳本的執行:

   1 bash

   2 sh

   3 加執行權限

        1)相對路徑

        2)絕對路徑

        3)放到$PATH變量指定的目錄里面,直接執行(tab)

 

  

   腳本調試執行:

   bash -n 檢查語法錯誤,不檢查拼寫錯誤

   bash -x 顯示腳本執行的時候每一個命令具體的執行結果

bash變量的種類

    本地變量(全局變量)  僅僅對當前shell生效

    環境變量    對當前shell以及其他shell都生效 export

    局部變量(私有變量)  通常用在函數里面,使用local

例子如下:

文本處理工具和shell腳本基本編程

文本處理工具和shell腳本基本編程


原創文章,作者:yaobinbin,如若轉載,請注明出處:http://www.www58058.com/73027

(0)
yaobinbinyaobinbin
上一篇 2017-04-09
下一篇 2017-04-09

相關推薦

  • 集群-基礎知識(2)

    負載均衡集群實現方法: 1、硬件方式 F5,CITRX,NETSCALER,A10(價格逐漸降低,由于為了防止調度器成為單點故障,所以要配置一臺備用設備,所以造價更高了) 2、軟件方式 四層:LVS(根據請求的ip和端口來分發),性能好,但對高級特性支持不好。 七層(反向代理):Nginx(http,smtp,pop3,imap),Haproxy(主要是ht…

    Linux干貨 2015-11-26
  • 【譯文】如何正確設定MySQL程序的選項

    MySQL手冊文檔版本:5.6  章節:4.2 Using MySQL Programs  略去了部分windows下使用mysql的相關的說明 譯者:古二娃 時間:2015-03-15 章節目錄: 4.2 Using MySQL Programs 4.2.1 Invoking MySQL Programs …

    Linux干貨 2015-03-10
  • 新建用戶的全?程解析

     新建用戶的全程解析: 1,編輯passwd文件,添加newuser用戶一行  nano /etc/passwd  newuser:x:2000:2000:NEWUSER:/home/newuser:/bin/bash  2,編輯group文件,添加newuser組一行 &nbs…

    系統運維 2016-08-05
  • 網絡管理(二)之IP地址劃分子網、多塊網卡共用單一IP

    網絡管理(二)IP地址   一、認識學習IP地址的組成: 1、它們可唯一標識IP 網絡中的每臺設備 2、IP地址由兩部分組成: 網絡ID:標識網絡;每個網段分配一個網絡ID 主機ID:標識單個主機;由組織分配給各設備 3、點分十進制計法表示IPv4地址: 4、如下圖,將系統中的IP地址用二進制表示,再通過轉換合成的十進制數,使用ping命令可得出:…

    Linux干貨 2016-09-05
  • 初識linux

    Linux操作系統入門 Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟件、應用程序和網絡協議。它支持32位和64位硬件。Linux繼承了Unix以網絡為核心的設計思想,是一個性能穩定的多用戶網絡操作系統。 1991年的10月5日,Linux創…

    Linux干貨 2016-06-09
  • Hadoop hdfs分布式文件系統

    一、MapReduce理論基礎 每個MapReduce job都是Hadoop客戶端想要執行的一個工作單元,它一般由輸入數據、MapReduce程序和配置信息組成,而Hadoop會把每個job分隔成兩類任務(task):map任務和reduce任務。在Hadoop集群中有兩類節點來執行兩類job進程的執行 1.1 大數據處理 任何基礎業務包含了收集、分析、監…

    2017-12-08

評論列表(1條)

  • renjin
    renjin 2017-04-12 12:01

    主要介紹了vim、 find命令、grep命令的用法及正則表達式方面的內容,內容總結的很詳細,要稍微注意一下排版,繼續努力!

欧美性久久久久