day03:shell特殊符號及經常使用文本工具cut sort wc uniq tr

本節會介紹:cut   sort   wc   uniq   tee   tr    split等文檔處理工具:shell

一、shell特殊符號:經常使用的符號以下:bash

*:表示零個或多個任意字符:工具

?:表示一個任意字符:code

#:表示註釋符號(shell腳本中經常使用):排序

\:表示脫義字符(特殊字符失去原本的含義):文檔

$:與!結合使用,「!$」表示上一條命令中的最後一個變量:字符串

;    分號,運行兩個或兩個以上的命令時使用:it

~  用戶的家目錄(root的家目錄是/root/,普通用戶的家目錄是/home/username):io

 用這個命令能夠某一條命令放在後臺去運行:test

[ ] 中括號爲一個字符的區間,表示中間的字符的任意有一個:

[root@localhost ~]# ls *.txt               # 「*」 能夠匹配出任意個任意字符:
11.txt  222.txt  2.txt  3.txt
[root@localhost ~]# ls ?.txt               # 「?」 只能表示一個任意字符:
2.txt  3.txt
[root@localhost ~]# c='$a$b'               #用」單引號「也能夠脫義:
[root@localhost ~]# echo $c
$a$b 
[root@localhost ~]# c=\$a\$b               #」斜槓「也可脫義,做用同上:
[root@localhost ~]# echo $c
$a$b

二、cut命令:用於截取字符串:

格式:cut    -d   '分隔符'     [  -cf  ]n                   #n是正整數:

-d:指定分隔符:分隔符要用單引號:(結合-f使用)

-f:後面接第幾個區塊:

-c:後面接第幾個字符:

[root@localhost ~]# cat /etc/passwd|cut -d ':' -f1      #-f要結合-d一塊兒使用:
bin
root
[root@localhost ~]# cat /etc/passwd|cut -c1|head -n2
r
b

三、sort命令:用於排序:[ -n   -r   -u   -kn1   -kn1,2  -t  ]

格式:sort     [-t  '分隔符']     [options]   [filename]

options:

-t:指定分隔符:通常結合-kn使用:

-n:使用純數字方式排序:(默認字母和數字爲0,會排序在前面,)

-r:逆向排序:

-kn1,n2:表示由n1到n2區間排序,若是隻寫kn1,表示只對n1字段排序:

sort不見任何選項,則從首字符開始,依次以ASCII碼值進行比較,最後按升序輸出:

[root@localhost ~]# cat 2.txt |sort            #默認以ASCII碼排序:
^*
,
#$
11111
2222
22222

-n和nr:純數字方式排序和逆向排序:

[root@localhost ~]# cat 2.txt |sort -n           #以純數字方式排序,特殊字符默認都爲0:
*
#$
2222
11111
22222
55555
[root@localhost ~]# cat 2.txt |sort -nr         #也是是以純數字方式排序,不過期倒序顯示:
55555
22222
11111
2222
#$
*

四、wc命令:用於統計文檔的行數字符數詞數

wc    [ options ]    filename

options

-l:統計行數:     list

-m:統計字符數:   member

-w:統計詞數:     word

[root@localhost ~]# cat 3.txt          #編寫次文檔內容作實驗:
123
abc
[root@localhost ~]# wc -l 3.txt        #統計文檔的行數:
2 3.txt
[root@localhost ~]# wc -w 3.txt        #統計文檔的詞數:(單詞):
2 3.txt
[root@localhost ~]# wc -m 3.txt           #統計當前文檔的字符數,發現明明是六個字符,卻顯示8個:
8 3.txt
[root@localhost ~]# cat -A 3.txt          #由於每行後面會有一個結束符‘$’:
123$
abc$

如上圖:使用 wc   -m 統計字符數後,會發現文檔裏明明六個字符,統計時卻顯示八個字符,這是由於每行都會有一個結束符存在:

五、uniq   去重複:用於統計文檔中的重複的文字

注:去重複以前須要先排序:通常須要結合sort使用,須要使用sort先排序

uniq     [ options ]    filename

options:

-c:=count,在每列旁邊顯示該行重複的次數:

[root@localhost ~]# uniq -c 3.txt           #首先直接去重複,發現不完整:
      2 123
      1 abc
      1 def
      1 456
      1 123
      1 456
[root@localhost ~]# sort -n 3.txt |uniq -c     #再次排序後再去重複,發現能夠的:
      1 abc
      1 def
      3 123
      2 456

如上:咱們第一次使用uniq去重複的時候,發現文字裏仍是有重複;因此須要使用sort先排序再去重複:如圖例2:

六、tee:輸出重定向:重定向的同時,也會輸出顯示在屏幕上

[root@localhost ~]# sort -n 2.txt |uniq -c |tee a.txt     #查看文件內容並重定向到a.txt:
      1 11111:222
      2 22222
      1 33333
      1 44444
      1 55555
[root@localhost ~]# cat 2.txt                       #查看文件內容:
11111:222
2222:111
33333
44444
22222
22222
55555
[root@localhost ~]#

-a追加的命令

[root@localhost ~]# sort -n 2.txt |uniq -c |tee -a a.txt     #再次追加文件內容:
      1 2222:111
      1 11111:222
      2 22222
      1 33333
      1 44444
      1 55555
[root@localhost ~]# cat a.txt                         #查看文件內容,發現發生變化:
      1 2222:111
      1 11111:222
      2 22222
      1 33333
      1 44444
      1 55555
      1 2222:111
      1 11111:222
      2 22222
      1 33333
      1 44444
      1 55555

七、tr替換字符

[root@localhost ~]# cat 1.txt |head -n2|tr '[a-z]' '[A-Z]'    #替換並再次查看文件內容:
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
[root@localhost ~]# cat 1.txt |head -n2|tr 'r' 'R'          #替換單個字符並查看文件內容:
Root:x:0:0:Root:/Root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

八、split切割文件內容:     -b      -l    

split  -b     filename                           #按大小來切割文檔,默認單位爲byte:可自定義單位:

split   -l      filename                          #按行數來切割文檔:

[root@localhost test]# split -b 100 a.txt            #按文件大小來劃分:
[root@localhost test]# ls
1.txt  a.txt  xaa  xab  xac
[root@localhost test]# split -b 100 a.txt tt        #劃分時可自定義文件名稱:
[root@localhost test]# ls
1.txt  a.txt  ttaa  ttab  ttac
[root@localhost test]# split -l 7 a.txt             #按行數來劃分:
[root@localhost test]# ls
1.txt  a.txt  xaa  xab  xac  xad

九、特殊字符:   「;」  「||」    「&&」

command1;command2    :   不論command1是否執行成功,都會執行command2:

command1 &&  command2  :   只有command1執行成功後,纔會執行command2:

command1  | |    command2 :   表示command1執行成功後,command2不執行,不然執行               command2:

[root@localhost test]# touch 1.txt;ls 1.txt         #表示都執行:
1.txt
[root@localhost test]# ls
1.txt
[root@localhost test]# ls 1.txt && mkdir dir    #表示第一條命令成功,才執行第二條命令:
1.txt
[root@localhost test]# ls
1.txt  dir
[root@localhost test]# ls a.txt && mkdir dir2   #當第一條命令失敗時,第二條也不執行:
ls: cannot access a.txt: No such file or directory
[root@localhost test]# ls
1.txt  dir
[root@localhost test]# ls a.txt || mkdir dir2      #表示第一條命令失敗後,纔會執行第二條命令:
ls: cannot access a.txt: No such file or directory
[root@localhost test]# ls
1.txt  dir  dir2
[root@localhost test]# ls 1.txt || mkdir dir3      #第一條命令成功了,則不會執行第二條命令:
1.txt
[root@localhost test]# ls
1.txt  dir  dir2
相關文章
相關標籤/搜索