shell 字符(串)處理命令

1. find   查找符合查找條件的文件
find pathname -options [-print -exec -ok …]
--options:
-perm :文件查找權限,後加數字
-type :文件類型,後加f:文件  d:目錄   l:符號連接文件
-group : 查找屬於group指定用戶組的文件

-exec :後面跟的是command命令
command命令的終止,使用 分號「;」來肯定,在後面必須有一個';'
{},使用{}來表示文件名,也就是find前面處理過程當中過濾出來的文件,用於command命令進行處理,可是對於不一樣的系統直接使用分號可能會有不一樣的意義,使用轉移符'\' 在分號前明確說明。  
-ok :後面跟的是command命令,與-exec不一樣的是每次執行command 都須要用戶確認是否執行。
Example:(1).列出文件名中含有root字符的文件
        find / -type f -name 「*root*」 -exec ls -l {} \;
2. tr 過濾器tr用來轉換來自標準輸入的字符。
tr [OPTION]... SET1 [SET2]
    1',把passwd中的全部小寫字符轉換成小寫字符
    tr [a-z] [A-Z] < /etc/passwd
--options
-s : 刪除全部與SET1重複的字符,只保留第一個。
    2',除去重複的e
    tr -s 'e'  <test4.txt
    tr -s 'e' 'f'  <test4.txt 把e轉換成f並把重複的f除去
-d : 刪除SET1同樣的字符
    3',刪除passwd中的':'
    tr -d ':'  /etc/passwd
3. sort 按字典序排序
4. uniq 去除重複
5. cut 字符串截取

  cut OPTION... [FILE]…
  --options
-c:以字符爲單位取出指定位置的字符
-d:指定分隔符分割字符串 與-f一塊兒使用
-b:以字節爲單位取出指定位置的字符
-f:依據 -d 的分隔字元將一段訊息分割成爲數段,用 -f 取出第幾段的意思
  cut -d ':' -f1 /etc/passwd
 對文件/etc/passwd 的每一行以 : 爲分割符,取出第一段
6. sed 過濾和轉換文本的流編輯器
sed [OPTION]... {script-only-if-no-other-script} [input-file]…
sed [options] 'command' file(s)
--option
  -n  --quiet,--silent
  -e command,--expression=command
git

  -i  直接在原文件上修改,而不是輸出到stdout,不然其它的處理都輸出到stdout正則表達式

 --command(相似vim中的command)
  1'.d 刪除指定的範圍的內容
    $sed '2d'  bashrc      刪除bashrc文件的第二行
    $sed '2,$d' bashrc     刪除bashrc文件的2到最後一行
    $sed '/#/d' bashrc     刪除bashrc文件中包含#的行
  2'.s 替換命令
    $sed 's/#/$/' bashrc   把bashrc文件每一行中的第一個#替換成$
  3'.p 打印命令
    $sed -n '2,5p' bashrc     把bashrc文件的2到5行打印出來
  4'.e 多點編輯(能夠多個命令一塊兒用)
    $ -n -e 's/#/$/' -e '2,5p' bashrc  把bashrc文件每一行中的第一個#替換成$,並把2,到    5行打印出來
  5'.a\ 追加命令
    $sed '/^#/a\This is append' bashrc 在bashrc文件的每一行行首是#的行的下一行添加    This is append
  6'.i\ 插入命令
    $sed '/^#/i\This is append' bashrc 在bashrc文件的每一行行首是#的行的前一行添加    This is append
  7'. w 寫入文件命令
    $sed '/^#/w filename'  bashrc   把bashrc中的每一行行首爲#的行寫入文件filename中
  8'. r讀入文件
    $sed '/^#/r filename' bashrc    把filenmae的內容寫入到 bashrc文件中的行首是#的行的後面
express

7.awkvim

    主要用於解析文本
bash

8. grep
grep [OPTIONS] PATTERN [FILE...]
--OPTIONS:
     -i :忽略大小寫
     --color
     -v :顯示沒有匹配的選項
     -o :只顯示匹配的字符串
     -r :遞歸的搜索匹配
--PATTERN: 正則表達式 regular expression(RE)
 []:匹配指定範圍內的任意單個字符
 [^ ]:匹配不在指定範圍內的任意單個字符
字符集:
[:digit:]  [:space:] [:upper:] [:lower:] [:alpha:] [:alnum:]
'[[:digit:]][[:space:]]' 表示匹配一個數字後加一個空格
元字符:
  (1).'.':匹配任意單個字符
  (2).'*':匹配其前面的字符任意次
  (3).'\?':匹配其前面的字符0或1次
  (4).'\{n,m\}':匹配其前面的字符n到m次
位置:
  (1). '^':此字符後面的字符必須出如今行首
  (2). '$':此字符前面的字符必須出如今行尾         ^$空白行
  (3). '\<或\b':此字符後面的字符必須做爲單詞首部出現
  (4). '\>或\b':此字符前面的字符必須做爲單詞尾部出現

分組:
  (1).'\(\)':後向引用
          \1:第一個左括號以及對應的右括號匹配的字符
         \2:第二個左括號以及對應的右括號匹配的字符
        \3:第三個左括號以及對應的右括號匹配的字符
   example:
        test.txt:
      He love his lover
      He love his liker
      He like his lover
      He like his liker

    $grep '\(l..e\).*\1' test.txt
    匹配:
       He love his lover
       He like his liker

(l..e)被做爲一個組看待,它是一個組,它的名稱是1,而後 .*表示 以後的任意個字符,【\1】指代的是前面用括號括起來的l..e。
--擴展
 egrep
 fgrep: fast grep,不支持正則表達式
 sed,awk支持正則表達式
9. file globbing (文件通配符)
bash自己沒有正則表達式的功能,bash所作的是展開文件名擴展,就是所謂的通配(globbing).
不是使用標準的正則表達式,而是使用通配符。通配解釋標準的通配符:
(1), *匹配任意多個字符,    除了」.」
(2), ?匹配一個字符,    除了」.」
(3), []匹配方括號中的任意一個字符,除了」.」
(4), 通配機制中的通配符和元字符不會擴展點文件
PS:Bash 會對命令行中沒有引號引發來的字符嘗試文件名擴展
app

相關文章
相關標籤/搜索