文本處理工具和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次,mn是一個范圍

 
[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 20:38
下一篇 2017-04-09 22:28

相關推薦

  • LVM——如何讓你的磁盤空間可大可小

    邏輯卷管理器(LVM) 允許對卷進行方便操作的抽象層,包括重新設定文件系統的大小 允許在多個物理設備間重新組織文件系統          將設備指定為物理卷          用一個或者多個物理卷來創…

    Linux干貨 2016-08-29
  • Centos圖形界面和命令行界面切換—-使用init

    1、從圖形界面切換到命令行界面      點擊Applications–System Tools–Terminal。    打開后輸入: su root(運行init需要管理員權限) 按回車,輸入init 3或者init 2都可以,然后回車就可以    進入命令行界…

    Linux干貨 2015-11-10
  • 曲徑通幽處,禪房花木深—-bash禪意腳本

    編程基礎 程序:指令+數據 程序編程風格: 過程式:以指令為中心,數據服務于指令 對象式:以數據為中心,指令服務于數據 shell程序:提供了編程能力,解釋執行 編程基本概念 編程邏輯處理方式: 順序執行 循環執行 選擇執行 shell編程:過程式、解釋執行 編程語言的基本結構: 數據存儲:變量、數組 表達式: a + b 語句:if shell腳本基礎 s…

    Linux干貨 2016-08-12
  • 億級用戶下的新浪微博平臺架構

    序言     新浪微博在2014年3月公布的月活躍用戶(MAU)已經達到1.43億,2014年新年第一分鐘發送的微博達808298條,如此巨大的用戶規模和業務量,需要高可用(HA)、高并發訪問、低延時的強大后臺系統支撐。 微博平臺第一代架構為LAMP架構,數據庫使用的是MyIsam,后臺用的是php,緩存為Memcache。 隨著應用規模…

    2015-03-16
  • CentOS7下重置root密碼

    CentOS7下重置root密碼          Linux系統、UNIX系統和其他類UNIX系統中,存在唯一的超級用戶root。普通用戶密碼忘掉可以用root用戶重置,但是一旦root密碼忘掉,事情就復雜起來了。本文主要介紹root密碼忘掉之后,重置密碼的過程。   &nbs…

    Linux干貨 2017-03-30
  • 遷移分區

          1 備份/home    2 創建分區 /dev/sdc1 10G   [root@localhost ~]# du -sh /home   52K /home   3 格式化分區   [root@localhost …

    Linux干貨 2017-04-25

評論列表(1條)

  • renjin
    renjin 2017-04-12 12:01

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

欧美性久久久久