其他文本處理命令以及bash變量中的一些字符串的處理方法

其他的文本處理命令:

1.wc

2.cut命令:

  cut - 在文件的每一行中提取片斷 

  注意:能夠被cut修剪的文件或數據內容,一般是具有某種特定格式或結構的文本文件或數據內容;

  如 :/etc/passwd

  格式:cut [OPTION]... [FILE]...


  常用選項:

   -d, --delimiter=DELIM:指定在實施修剪操作時所使用的字段分隔符號,默認是TAB(空白字符);

   -f, --fields=LIST:根據指定的字段分隔符號來指定要保留的字段編號列表;

     LIST可以稱爲字段列表,地址定界,書寫方法:

      1.NUM:選擇被指定的單個數字所表示的字段,該字段將被保留;

      2.NUM1,NUM2,NUM3,……:離散的多個被指定的字段的數字的列表;所有數值所代表的字段均被保留;

      3.NUM1-NUM2:連續的多個被指定的字段的數字列表,所有數值所代表的字段均被保留;

      NUM1-:從NUM1開始直到行尾的所有字段;

      -NUM2:從行首第一個字節開始直到NUM2的所有字節

   --output-delimiter=STRING:指定輸出數據時的字段分隔符號;

   例:取出用戶名,UID,以及默認的shell

      [root@localhost ~]# cut -d ":" -f 1,3,7 --output-delimiter=" " /etc/passwd

      對於某些特定格式的數據進行剪切提取,並以規範的格式輸出也可以用下一個awk命令

      [root@localhost ~]# df | tr -s ' ' '\t' | cut -f 3,5


3.awk:

  gawk - pattern scanning and processing language


  常用選項:

   -F fs,--field-separator fs:指定字段分隔符,默認空白字符;


   對於awk,根據字符分隔符切分出來的各字段,分別使用$1,$2,$3,……$NF來進行標識:$1,$2,$3……$NF是awk的內部變量;


   awk|gawk [Options] ...'/PATTERN/{print $1,$2}'

   例:[root@localhost ~]# df | awk '{print $3,$5}' |tr ' ' '\t'

       已用    已用%

       3696340 8%

       0    0%

       88    1%

       9140    1%

       0    0%

       154172 77%

       16    1%

       8086368 100%



4.sort:

  sort - sort lines of text files

  對於指定文件中的行按照ASCII編碼表中的字符順序進行排序輸出;

  格式:sort [OPTION]... [FILE]...


  常用選項:

   -n:以數字的數值大小爲排序依據進行排序;

   -r:倒序顯示排序結果;

   -R:隨機排序:只是此隨機排序算法非常簡陋,不太適用於複雜環境中的排序要求;

   -u, --unique:重複出現的行,只出現一次,去重;連續且相同的行稱爲重複行;

   -t,--field-separator=SRP:指定字段分隔符;

   -k:指定根據哪個關鍵字字段進行排序,一般和-t同時使用;

   隨機選取用戶:[root@localhost ~]# sort -R /etc/passwd | head -1

                 halt:x:7:0:halt:/sbin:/sbin/halt


5.uniq

  uniq - 刪除排序文件中的重複行

  注意:uniq命令本身不具備排序的功能;

  格式:uniq [OPTION]... [INPUT [OUTPUT]]


  常用選項:

   -c, --count:對於重複的行計算重複次數;(常用於統計日誌文件)

   -d, --repeated:只顯示重複的行,且每個重複行只顯示一個作爲代表;

   -u, --unique:只顯示無重複行;


6.diff

  diff - compare files line by line 對兩個文件內容進行逐行比較

  格式:diff [OPTION]...FILE


  製作patch文件:

  # diff file1 file2 > patch_file

  注意:patch_file中記錄的是file2的內容和file1文件相比有哪些不同;使用patch_file時,應該向file1打補丁;


7.patch:

  patch - apply a diff file to an original

  格式:patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]


  常用選項:

   -i patchfile or --input=patchfile:用於指明patch文件的路徑;


 條件測試命令:

   test命令 == [命令,bash的內建命令;

   格式:

    test expression

    [ expression ]

    [[:bash的關鍵字,一般僅用於某些特定結構或這種格式之中;

    [[ expression ]]


   注意:此類條件測試命令,一般沒有執行結果,僅有執行狀態返回值,如果其執行狀態返回值爲0則表示true,如果其執行狀態返回值爲1,則表示false;


   條件測試命令共有三類條件測試表達式:


   1.數值測試:雙目操作;

    測試操作符:

     -eq:測試兩個數值是否相等;相等爲真,不等爲假;

     -ne:測試兩個數值是否不等;相等爲假,不等爲真;

     -lt:小於,測試左邊的數值是否小於右邊的數值;小於爲真,不小於爲假;

     -gt:大於,測試左邊數值是否大於右邊數值;大於爲真,不大於爲假;

     -le:小於等於,測試左邊的數值是否不大於右邊數值;如果不大於爲真,大於爲假;

     -ge:大於等於,測試左邊的數值是否不小於右邊數值;如果不小於爲真,小於爲假;


    注意:bash僅支持整數,不支持浮點數;


   2.字符串測試:

    雙目測試:

     ==|=:測試兩個字符串是否爲相同的字符串;相同爲真,不同爲假;

     !=:測試兩個字符串是否不相同;不同爲真,相同爲假;

     >:測試左邊的字符串所對應的ASCII編碼是否比右邊的字符串ASCII編碼大;大於爲真,小於爲假;

     <:測試左邊的字符串所對應的ASCII編碼是否比右邊的字符串ASCII編碼小;小於爲真,大於爲假;

     STRING=~PATTERN:測試左側的字符串STRING能否被右邊的模式PATTERN匹配;能匹配爲真,不能爲假;


     注意:>,<,=~這三類測試操作符只能用在[[expression]]測試語句中使用

     [root@localhost ~]# [ a == a ]

     [root@localhost ~]# echo $?

     0

     [root@localhost ~]# [ a == b ]

     [root@localhost ~]# echo $?

     1



    單目測試

     -z'STRING':測試STRING是否爲空字符串,空爲真,不空爲假;

     [root@localhost ~]# [ -z $MYVAR ]

     [root@localhost ~]# echo $?

     0

     -n'STRING':測試STRING是否爲非空字符串,不空爲真,空爲假;

     [root@localhost ~]# [ -n $MYVAR ]

     [root@localhost ~]# echo $?

     0

   注意:

   1】通常情況下,字符串是要用引號引用的,單引號或雙引號都可以,只有在特定的情況下,只能選擇單引號或雙引號之一;

   2】[]和[[]]在某些情況下,意義不完全相同,要區分對待;

   3】如果使用[]或[[]]進行條件判斷,在表達式的兩端都有留空白字符,以區分命令和參數之間的關係;

   4】所有的雙目測試操作符和參數之間也要留有空白字符空間;


   3.文件測試:

    單目測試:

     -a|-e FILE:測試文件是否存在,存在爲真,不存在爲假;

     -b FILE:測試文件是否存在且爲塊設備文件,存在且爲塊設備爲真,否則爲假;

     -c FILE:測試文件是否存在且爲字符設備文件,存在且爲字符設備爲真,否則爲假;

     -d FILE:測試文件是否存在且爲目錄文件,存在且爲目錄文件爲真,否則爲假;

     -f FILE:測試文件是否存在且爲普通文件,存在且爲普通文件爲真,否則爲假;

     -h|-l FILE:測試文件是否存在且爲符號鏈接文件,存在且爲符號鏈接文件爲真,否則爲假;

     -s FILE:測試文件是否存在且其大小要大於零,存在且大小大於0爲真,否則爲假;

     -S FILE:測試文件是否存在且爲套接字文件,存在且爲套接字爲真,否則爲假;

     -t FD:測試文件描述符是否在終端上被打開,被打開爲真,否則爲假;

     -r FILE:測試文件是否存在且當前用戶是否被授予讀權限,存在且授權爲真,否則爲假;

     -w FILE:測試文件是否存在且當前用戶是否被授予寫權限,存在且授權爲真,否則爲假;

     -x FILE:測試文件是否存在且當前用戶是否被授予執行或搜索權限,存在且授權爲真,否則爲假;


     文件特殊權限標識測試:

     -u FILE:測試文件是否存在且設置了SUID,存在且授權爲真否則爲假;

     -g FILE:測試文件是否存在且設置了SGID,存在且授權爲真否則爲假;

     -k FILE:測試文件是否存在且設置了STICKY,存在且授權爲真否則爲假;


     文件的所有權測試:

     -O FILE:測試文件是否存在且其屬主爲當前有效用戶;存在且屬主爲當前有效用戶爲真,否則爲假

     -G FILE:測試文件是否存在且其屬組是否爲當前有效用戶的所在組;存在且屬組爲當前有效用戶的所在組爲真,否則爲假;


    雙目測試:

     FILE1 -ef FILE2:測試兩個文件是否擁有相同的Inode標號:即:兩個文件是否爲硬鏈接;


   測試語句中添加邏輯運算符號:

    1.利用bash的邏輯運算符號:

      [ expression1 ] && [ expression2 ]

      [ expression1 ] || [ expression2 ]

      ![ expression ]

    2.利用條件測試本身的邏輯運算符號:

     [ expression1 -a expression2 ]

     [ expression1 -o expression2 ]


   命令的執行結果:

    1.命令的正常輸出結果;

    2.命令的執行狀態返回值;

     0-255

     0:標識命令成功執行或者條件判斷爲真;

     1-255:表示命令執行失敗或者條件判斷爲假;

     1,2,127:系統默認保留的;

     3-126,128-255:用戶自定義命令執行狀態返回值;


   exit命令:

    exit - exit the shell

    格式:exit [n]

       退出shell時可以使用n作爲狀態返回值;如果沒有指定n,則默認的狀態返回值爲最後一條命令的狀態返回值;


    注意:

      當shell腳本運行時一旦遇到exit命令將立即結束運行此腳本的shell進程,同時次腳本的運行也會停止,其後續的所有命令不會再被解釋執行,因此包含了exit命令的腳本,不要使用source命令來執行;


bash的顏色顯示規則:

 調用了ASCII編碼對於顏色的設置方案‘


 Ctrl鍵:\033

 [:控制字符和顏色代碼之間的分隔符;

 所有的顏色代碼都應該使用m結尾;


 顏色代碼:

  0:關閉顏色顯示屬性,恢復爲黑白色;

  1:加粗子顯示文本字符;

  4:爲文本字符添加下劃線標識;

  5:使文本字符閃爍;

  7:將文本字符的背景顏色和前景顏色交換;

  8:將文本字符的背景顏色設置爲與前景顏色相同;


  30-39:設置文本字符的前景色,38,39爲保留,未被使用;

  40-49:設置文本字符的背景色,48,49爲保留,暫時未使用;


  注意:此類控制字符和顏色代碼必須放置在echo -e 模式中顯示;


程序的組成部分:

 一個完整的應用程序,一般包括四類文件:

   二進制文件;

   頭文件和庫文件:

   幫助文件:

   配置文件:


  bash——CLI中的一種:


  bash同樣屬於完整的應用程序,上述四類文件,bash都有;

   二進制文件:/bin/bash

   頭文件和庫文件:/lib64/

   幫助文件: /usr/share/man/man1/bash.a.gz

   配置文件:

    三類:

     1.profile類:

       爲交互式登錄的shell進程實現功能初始化的配置文件;

     2.bashrc類:

       爲非交互式登錄的shell進程實現功能啓動配置的配置文件;

     3.logout

       爲交互式登錄的shell進程提供終止及清理類功能的配置文件;


   bash的類型:

    1.交互式登錄的bash

     1)直接通過某個終端輸入賬戶信息和密碼之後打開的bash進程;

     2)su - | -l USERNAME執行切換登錄大開的bash進程;


     配置文件的加載順序:

      /etc/profile --> /etc/profile.d/*.sh -->~/.bash_profile --> ~/.bashrc --> /etc/bashrc


    2.非交互式登錄的bash

     1)在圖形界面下,通過菜單項或右鍵菜單打開的終端所啓動的bash進程;

     2)使用su USERNAME執行切換登錄打開的bash進程;


     配置文件的加載順序:

      ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

   bash的配置文件:

    1.profile類:

     全局配置文件

      /etc/profile

      /etc/profile.d/*.sh


      注意:在RHEL或CentOS系列的發行版操作系統中,通常會存在這樣的情況;如果一個配置文件的內容很多,格式很複雜,將會嘗試將此配置文件切割拆分爲多個片段配置文件,往往把最核心最主要的主配置文件中,將一些附屬的或者擴展的配置內容分散存放在各個片段配置文件中;而被切分出來的片段配置文件一般會統一保存在“程序名稱.d”命名格式的目錄中;而我們約定,在這類目錄中保存的片段配置文件的後綴名稱會是統一的字符串;


     個人配置文件:

      ~/.bash_profile


      profile類配置文件的作用:

       1.用於定義用戶的環境變量;

       2.用於運行腳本或者執行命令;


    2.bashrc類:

     全局配置文件:

      /etc/bashrc


      個人配置文件:

      ~/.bashrc


      bashrc類配置文件的作用:

        1.用於定義本地變量

        2.定義命令別名

        3.用於定義umask


      注意:只有root用戶才能修改全局類的bash配置文件,普通用戶只能修該其家目錄中屬於其個人的配置文件;


       爲什麼要爲bash使用配置文件?

       所有利用bash命令行完成的命令行完成的命令操作,只要沒有涉及到文件修改的,一般都只是針對當前的shell生效,一旦shell進程結束,則此前所有的操作的生命週期就咋偶到盡頭,即配置失效;


       配置文件的作用:

        1.能夠使用戶賴以生存的配置信息長期有效;

        2.能夠讓用戶保存此前的配置內容;


       讓配置文件中新進修改的內容生效:

        1.註銷重新登錄,打開新的shell進程;

        2.source命令;

        3.exec命令;


    3.logout類:

      個人配置文件:

       ~/bash_logout


       作用:在關閉shell進程之前,清除某些用戶自定義的配置,刪除某些臨時文件或目錄,以及撤銷用戶此前定義的變量,清理某些可能會引發安安全問題的隱患等操作;


 bash的變量中存放的字符串的處理方式:

  bash變量:

   弱變量:

    1.無需事先定義即可應用;

    2.變量沒有數據類型的硬性要求默認是字符型;


   1.字符串切片:

     ${#VAR}:返回字符類型變量的變量值的長度;

     ${VAR:offset}:返回字符型變量中第“offset”位置之後的內容不包括第“offset”位置的字符;offset取值範圍爲:0-$[${#VAR}-1]

     ${VAR:offset:number}:返回字符型變量中從第offset個字符後長度爲number的字符部分;

     ${VAR -length}:取字符型變量字符串最右側的“length”個字符


     注意:在“-length”之前要留有空格;


   2.基於模式(PATTERN)取字符串

     ${VAR#*PATTERN}:自左而右查找VAR變量中所存儲的字符串中,第一次被PATTERN匹配到的字符,刪除從字符串開始到第一個被PATTERN匹配的字符之間的所有字符;

     ${VAR##*PATTERN}:自左而右查找VAR變量中所存儲的字符串中,所有被PATTERN匹配到的字符,刪除從字符串開始到最後一次被PATTERN匹配的字符之間的所有字符;

     ${VAR%PATTERN*}:自右向左去查找VAR變量所存儲的字符串中,第一次被PATTERN匹配到的字符,刪除從字符串結尾到第一個PATTERN匹配到的字符之間的所有字符;

     ${VAR%%PATTERN*}:自右向左去查找VAR變量所存儲的字符串中,所有被PATTERN匹配到的字符,刪除從字符串結尾到最後一個PATTERN匹配到的字符之間的所有字符;


   3.查找替換:

     ${VAR/PATTERN/SUBSTRING}:在VAR變量中,查找能夠被PATTERN匹配到的內容,將其中第一個匹配到的結果PATTERN替換爲SUBSTRING;

     ${VAR//PATTERN/SUBSTRING}:在VAR變量中,查找能夠被PATTERN匹配到的內容,將所有匹配到的結果PATTERN替換爲SUBSTRING;

     ${VAR/#PATTERN/SUBSTRING}:在VAR變量中查找行首匹配PATTERN的內容,將匹配的內容更換成SUBSTRING;

     ${VAR/%PATTERN/SUBSTRING}:在VAR變量中查找行尾匹配PATTERN的內容,將匹配的內容更換成SUBSTRING;


   4.查找刪除:

     ${VAR/PATTERN}:在VAR變量中,查找能夠被PATTERN匹配到的內容,將其中第一個匹配到的結果PATTERN刪除;

     ${VAR/PATTERN}:在VAR變量中,查找能夠被PATTERN匹配到的內容,將所有匹配到的結果PATTERN刪除;

     ${VAR/#PATTERN}:在VAR變量中查找行首匹配PATTERN的內容,將匹配的內容刪除;

     ${VAR/%PATTERN}:在VAR變量中查找行尾匹配PATTERN的內容,將匹配的內容刪除;


   5.字符串的大小寫轉換:

     ${VAR^^}:將變量中的小寫字母轉換爲大寫字母;

     ${VAR,,}:將變量中的大寫字母轉換爲小寫字母:


   6.變量賦值操作:

     ${VAR:-value}:如果VAR變量爲空值或者變量爲被定義,那麼就直接返回value中的值;否則就返回VAR的值;

     ${VAR:+value}:如果VAR已被定義且不爲空,則返回value的值;

     ${VAR:=value}:如果VAR變量爲空值或者未被定義,那麼直接返回value中的值並且將vvalue的值賦給變量VAR;否則返回變量VAR的值;


   7.變量的間接引用:

     如果第一變量的值恰好是第二個變量名,那麼從第一變量引用第二個變量而方法,就稱爲變量的間接引用,也稱爲間接變量引用;

      如:VAR1=VAR2,VAR2=HELLO6


     bash提供了這樣的間接變量引用的的方法:

      eval MYVAR= \$$VAR1


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章