你必須很努力

Day09 - 一些常用 Linux 指令 - 4-7 (grep、rg、luit、iconv、cal、date)

2020/09/14
字數統計: 1.4k閱讀時間: 6 min

前言

此為 Linux 相關的 4-7 篇,有準備情境讓大家可以練習,開始會有組合技的使用技巧

情境練習

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 將以下資訊儲存成 demo.log

INFO [2099-01-11 13:14:40]: order_id: 0001, message: "建立成功"
INFO [2099-01-11 14:15:41]: 其它資訊
INFO [2099-01-11 14:18:42]: order_id: 0002, message: "建立成功"
INFO [2099-01-12 10:00:10]: order_id: 0003, message: "建立成功"
INFO [2099-01-12 10:00:13]: 其它資訊
INFO [2099-01-12 11:22:40]: order_id: ----, message: "建立失敗"
INFO [2099-01-15 14:15:40]: order_id: 0004, message: "建立成功"
INFO [2099-01-15 23:34:10]: order_id: 0005, message: "建立成功"
INFO [2099-01-15 14:15:32]: order_id: 0006, message: "建立成功"
INFO [2099-01-15 14:15:33]: 其它資訊
INFO [2099-01-16 14:15:24]: order_id: 0007, message: "建立成功"
INFO [2099-01-16 14:15:25]: order_id: ----, message: "建立失敗"
INFO [2099-01-16 14:15:29]: order_id: 0008, message: "建立成功"
INFO [2099-01-16 14:15:30]: 其它資訊
INFO [2099-01-16 14:15:30]: order_id: ----, message: "建立失敗"
INFO [2099-12-25 08:15:40]: order_id: 0009, message: "建立成功"
INFO [2099-12-25 09:15:40]: 其它資訊
INFO [2099-12-25 10:15:40]: order_id: 0010, message: "建立成功"
INFO [2099-12-25 11:15:40]: order_id: 0011, message: "建立成功"
INFO [2099-12-25 11:15:40]: order_id: 0012, message: "建立成功"
INFO [2099-12-25 15:15:40]: 其它資訊
INFO [2099-12-25 16:15:40]: order_id: ----, message: "建立失敗"
INFO [2099-12-25 17:15:40]: order_id: 0013, message: "建立成功"
INFO [2099-12-25 20:15:40]: 其它資訊

grep

找出符合搜尋條件的訊息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 關鍵字 路徑
grep search_pattern path

# 找出正在運行中的程式,關鍵字為 line
ps aux | grep line

# 符合條件的下文也顯示 6 行
grep -A 6 "0007" demo.log

# 符合條件的上文也顯示 3 行
grep -B 3 "0007" demo.log

# 符合條件的下下各顯示 5 行
grep -C 5 "成功" demo.log

# 計算關鍵字出現的次數
grep -c "成功" demo.log

# 過濾除了關鍵字的訊息
grep -v "其它" demo.log

# 找出符合 A or B 關鍵字的訊息
grep -E "2099|成功" demo.log
grep -E '2099|成功' demo.log
grep '2099\|成功' demo.log

# 找出符合 A and B 的關鍵字訊息
grep "2099" demo.log | grep 成功

# 找出 2099-01-16 建立成功的訂單數量
# 方法1
grep '2099-01-16' demo.log | grep -c 建立成功
# 方法2
grep '2099-01-16' demo.log | grep 建立成功 | wc -l
# 方法3
grep '2099-01-16' demo.log | grep -v -c '建立失敗\|其它資訊'

# 找出 2099-01-16 建立成功的資訊,並反轉印出
grep '2099-01-16' demo.log | grep 建立成功 | tac

幾個常用參數說明:

符合條件的下文也顯示 n 行: -A n
符合條件的上文也顯示 n 行: -B n
符合條件的上下各顯示 n 行: -C n
計算符合條件的數量: -c
除了關鍵字以外的訊息,其它全顯示: -v
用正規表示式搜尋 (regexp): -E

rg

全名為 ripgrep ,為 grep 加強版,
用起來手感與 grep 差不多,搜尋速度更快,個人習慣以 rg 取代 grep

備註: 需另外安裝 官方網站

1
2
3
4
5
6
7
8
9
10
11
12
13
# MacOS、Linux 原生不支援這指令

# MacOS 安裝指令
brew install ripgrep

rg 建立成功
rg -uu 建立成功
rg -C 7 建立失敗
rg '2099|成功' demo.log
rg "2099" demo.log | rg 成功
rg -t log 成功

rg -z "成功"

幾個常用參數說明:

符合條件的下文也顯示 n 行: -A n
符合條件的上文也顯示 n 行: -B n
符合條件的上下各顯示 n 行: -C n
計算符合條件的數量: -c
除了關鍵字以外的訊息,其它全顯示: -v
隱藏檔案及 .gitignore 檔也一併搜尋: -uu
針對特定副檔名搜尋: -t type
壓縮檔也一併搜尋: -z (支援格式 gzip、bzip2、xz、LZ4、LZMA、Brotli、Zstd)

(謎之聲,習慣在終端機直接輸入 rg 關鍵字,快速找該目錄底下所有符合條件的檔案及內容

luit

將文件編碼轉換成另一種格式

1
2
3
4
5
6
7
8
9
# MacOS 原生不支援這指令
# Ubuntu 有支援

# MacOS 安裝指令
brew install luit

# 範例
luit -encoding big5 cat demo.txt
luit -encoding big5 rg '訂單' demo.txt

iconv

多種國際編碼格式之間進行文字內碼的轉換

1
2
3
4
5
iconv -l

# 範例
cat order_info.txt | iconv -f big5
iconv -f UTF-16 demo.log > hello.log

幾個常用參數說明:

顯示所有支援的編碼格式: -l
將檔案進行編碼轉檔後,另存新檔案: -f from_encoding input_file > output_file

以 BIG5 編碼檔案為例

cal

顯示行事曆資訊

1
2
3
4
5
cal
cal -3
cal -m 12
cal -y 2012
cal 1 2012

幾個常用參數說明:

顯示當月的前後一個月: -3
顯示當年指定月份 (month 為 1-12): -m month
顯示指定年份月曆 (year 為 1..9999): -y year
顯示特定月份日曆 (參數範圍如上): month year

date

顯示系統日期時間資訊

1
2
3
date
date +%s
date -r 1598937256

幾個常用參數說明:

將當下時間轉成 Unix timestamp: +%s
將 Unix timestamp 轉成人類看得懂的: -r timestamp

總整理

MacOS / Linux 指令 說明 範例
grep 找出符合搜尋條件的訊息 rails routes | grep admin
rg grep 加強版 rg 訂單名稱
luit 將文件編碼轉換成另一種格式 luit -encoding big5 cat demo.txt
iconv 多種國際編碼格式之間進行文字內碼的轉換 cat order_info.txt | iconv -f big5
cal 顯示行事曆資訊 cal -m 7
date 顯示系統日期時間資訊 date

小結

這篇花蠻多時間在想情境及準備假資料,透過範例,能更快上手並學會組合技,
若覺得受用歡迎在下方留言或交流喔


鐵人賽文章連結:https://ithelp.ithome.com.tw/articles/10236391
medium 文章連結:https://link.medium.com/YFjvigcCK9
本文同步發布於 小菜的 Blog https://riverye.com/

備註:之後文章修改更新,以個人部落格為主

CATALOG
  1. 1. 前言
    1. 1.0.1. 情境練習
  • 2. grep
    1. 2.0.1. 幾個常用參數說明:
  • 3. rg
    1. 3.0.1. 幾個常用參數說明:
  • 4. luit
  • 5. iconv
    1. 5.0.1. 幾個常用參數說明:
    2. 5.0.2. 以 BIG5 編碼檔案為例
  • 6. cal
    1. 6.0.1. 幾個常用參數說明:
  • 7. date
    1. 7.0.1. 幾個常用參數說明:
  • 8. 總整理
  • 9. 小結