linux常用命令(shell腳本常用命令)(grep、cut、sort、uniq、seq、tr、basename、dirname)


本章命令:

1 2 3 4 5 6
grep cut sort uniq seq tr

1、grep

作用:過濾文本內容

選項 描述
-E :--extended--regexp 模式是擴展正則表達式(ERE)
-i :--ignore--case 忽略大小寫
-n: --line--number 打印行號
-o:--only--matching 只打印匹配的內容
-c:--count 只打印每個文件匹配的行數
-B:--before--context=NUM 打印匹配的前幾行
-A:--after--context=NUM 打印匹配的后幾行
-C:--context=NUM 打印匹配的前后幾行
--color[=WHEN] 匹配的字體顏色,別名已定義了
-v:--invert--match 打印不匹配的行
-e 多點操作eg:grep -e "^s" -e "s$"

樣本文件內容

[root@ken ~]# cat test
dlakdlad
ad
ad
a
dFSAF
A
F
F
AS
F
f
sf
as
f

實例1:打印出所有的a無論大小寫 : -i選項

╭─root@localhost.localdomain ~  
╰─➤   grep -i “a” test
dlakdlad
ad
ad
a
dFSAF
A
AS
as

實例2:打印出所有的a無論大小寫,並且顯示該字符串所在的行 : -n選項

╭─root@localhost.localdomain ~  
╰─➤   grep -i -n “a” test
1:dlakdlad
2:ad
3:ad
4:a
5:dFSAF
6:A
9:AS
13:as

實例3:僅僅打印出所有匹配的字符串: -o選項

╭─root@localhost.localdomain ~  
╰─➤   grep -i -o “a” test
a
a
a
a
a
A
A
A
a

實例4:打印出匹配的字符串有多少行 -c選項

╭─root@localhost.localdomain ~  
╰─➤   grep -i -c “a” test
8

實例5:打印出字符S前面的2行 -B

╭─root@localhost.localdomain ~  
╰─➤  grep -B 2 “S” test
ad
a
dFSAF
—
F
F
AS

實例6:打印出字符S后面的2行 -A

╭─root@localhost.localdomain ~  
╰─➤  grep -A 2 “S” test
dFSAF
A
F
—
AS
F
f

實例7:打印出字符S前后2行 -C

╭─root@localhost.localdomain ~  
╰─➤   grep -C 2 “S” test
ad
a
dFSAF
A
F
F
AS
F
f

實例8:打印出不包含大小s的所有行 取反 -v

╭─root@localhost.localdomain ~  
╰─➤   grep -i -v “s” test
dlakdlad
ad
ad
a
A
F
F
F
f
f

grep可以從文件當中直接搜索某個關鍵詞,也可以從標准輸入里面搜錯

╭─root@localhost.localdomain ~  
╰─➤   grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
╭─root@localhost.localdomain ~  
╰─➤   cat /etc/passwd | grep “root”
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

2.cut

-c :以字符為單位進行分割。
-d :自定義分隔符。
-f :與-d一起使用,指定顯示哪個區域。

實例1:獲取6位隨機加密數

╭─root@localhost.localdomain ~  
╰─➤  echo $RANDOM | md5sum | cut -c 1-6
bb2788
╭─root@localhost.localdomain ~  
╰─➤   echo $RANDOM | md5sum | cut -c 1-6
45a0e0

實例2:截取指定的字符串

╭─root@localhost.localdomain ~  
╰─➤   echo “abcd” | cut -c 2
b

實例3:截取出來/etc/passwd用戶名

╭─root@localhost.localdomain ~  
╰─➤   cat /etc/passwd | cut -d “:” -f 1
root
bin
daemon
adm
lp
sync
shutdown
halt

實例4:截取出來/etc/passwd用戶的shell類型

╭─root@localhost.localdomain ~  
╰─➤   cat /etc/passwd | cut -d “:” -f 7
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown

實例5:截取出來/etc/passwd用戶以及shell類型

╭─root@localhost.localdomain ~  
╰─➤  cat /etc/passwd | cut -d “:” -f 1,7
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin
adm:/sbin/nologin
lp:/sbin/nologin
sync:/bin/sync
shutdown:/sbin/shutdown
halt:/sbin/halt

3.sort

-k:根據切割后的那一段進行排序
-n 依照數值的大小排序(默認是根據字符進行排序)。
-r 以相反的順序來排序。
-t<分隔字符> 指定排序時所用的欄位分隔字符。
-u:去除重復的行(只要那個指定的字段重復,就認定是重復的行)

演示文件

╭─root@localhost.localdomain ~  
╰─➤   cat test
12
23
2
3
5

實例1:以數字排序 -n

╭─root@localhost.localdomain ~  
╰─➤   sort test
12
2
23
3
5
╭─root@localhost.localdomain ~  
╰─➤   sort -n test
2
3
5
12
23

實例2:降序排序

╭─root@localhost.localdomain ~  
╰─➤   sort -n -r test
23
12
5
3
2

實例3:降序排序並取出前3行

╭─root@localhost.localdomain ~  
╰─➤   sort -n -r test | head -3
23
12
5

演示文件

╭─root@localhost.localdomain ~  
╰─➤   cat test
12:3
23:4
2:12
3:5
5:23

實例4:以冒號為分隔符,第二列進行數字降序排序

╭─root@localhost.localdomain ~  
╰─➤   cat test | sort -t “:” -k2 -n -r
5:23
2:12
3:5
23:4
12:3

演示文本:

╭─root@localhost.localdomain ~  
╰─➤   cat test
12:3
12:3
12:3
12:3
23:4
2:12
3:5
3:5
3:5
3:5
5:23

實例5:顯示行並去除重復行

╭─root@localhost.localdomain ~  
╰─➤   sort -u test
12:3
2:12
23:4
3:5
5:23

4. uniq

-c:(count)在行首用數字表示該行出現了多少次
-u:僅僅顯示那些沒有出現重復過的行

演示文件

╭─root@localhost.localdomain ~  
╰─➤   cat test
12:3
12:3
12:3
12:3
23:4
2:12
3:5
3:5
3:5
3:5
5:23

實例1:統計每行出現的次數

╭─root@localhost.localdomain ~  
╰─➤   uniq -c test
4 12:3
1 23:4
1 2:12
4 3:5
1 5:23

實例2:演示沒有出現出重復行的數量

╭─root@localhost.localdomain ~  
╰─➤   uniq -u test
23:4
2:12
5:23

5、seq

實例1:

╭─root@localhost.localdomain ~  
╰─➤   seq 5
1
2
3
4
5

實例2:

╭─root@localhost.localdomain ~  
╰─➤   seq 2 5
2
3
4
5

實例3:

╭─root@localhost.localdomain ~  
╰─➤   seq 2 2 10  #第一個2是起始位,第二個2是步長,第三個10是終止位
2
4
6
8
10

實例4:取出100以內所有的奇數

╭─root@localhost.localdomain ~  
╰─➤  seq 1 2 100
1
3
5
7
9
11
13
15
17

實例5:取出100以內所有的偶數

╭─root@localhost.localdomain ~  
╰─➤   seq 2 2 100
2
4
6
8
10
12
14
16

6.tr命令:命令用於轉換或刪除文件中的字符

-d:刪除指定的字符串

實例1:把所有的小寫字母都轉化為大寫字母

╭─root@localhost.localdomain ~  
╰─➤   echo “daadadfaedqdac” | tr a-z A-Z
DAADADFAEDQDAC

實例2:把所有的大寫字母都轉化為小寫字母

╭─root@localhost.localdomain ~  
╰─➤   echo “SDSDA2WZFAF” | tr A-Z a-z
sdsda2wzfaf

實例3:刪除一行中的空格

╭─root@localhost.localdomain ~  
╰─➤   echo “ada dada dada” | tr -d ” ”
adadadadada

應用實例:獲取主機IP地址

╭─root@localhost.localdomain ~  
╰─➤  ip a | grep global | cut -d " " -f 6 | cut -d "/" -f1
192.168.80.3

應用實例:獲取6位隨機密碼

╭─root@localhost.localdomain ~  
╰─➤  echo $RANDOM |md5sum|cut -c 1-6
6a492b
╭─root@localhost.localdomain ~  
╰─➤  echo $RANDOM |md5sum|cut -c 1-6
aee13f

7、 basename 和 dirname

# basename:取出基名即文件名
[root@c43i08102.cloud.i09.amtest90 /etc/sysconfig/network-scripts] 
#basename `pwd`
network-scripts
#  dirname:取出目錄名
[root@c43i08102.cloud.i09.amtest90 /etc/sysconfig/network-scripts]  
#dirname `pwd`
/etc/sysconfig


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM