文字處理
文字檔案的查看、編輯、處理與分析
awk
操作數據和生成報告
# 基本語法示例
awk '{print}' tmnt.txt
awk '{print $1}' tmnt.txt
awk '{print $1,$3}' tmnt.txt
# 使用 NF (number of fields)
awk '{print $NF}' tmnt.txt
# 使用指定分隔符
awk -F':' '{print $2}' /etc/passwd
awk -F':' '{print $1,$7}' /etc/passwdcat
檢視文件內容
# 檢視文件
cat .bash_history
cat /etc/shells
cat /etc/os-release
# 添加內容到文件
cat > new_file.txt # 替換
cat >> new_file.txt # 追加
cat [file1] [file2] > combine.txt # 合併
# 標準輸入輸出
cat < peanuts.txt > banana.txt
# 顯示特定内容
cat /etc/services # 列出開放的端口和協議
cat /etc/ssh/sshd_config | grep Port
cat /etc/*release* # 檢查 OS 信息
cat /proc/version # 列出 Linux 內核信息cmp
二進制比較(檢測第一處差異)
cmp file1.txt file2.txt檢查兩個文件是否相同
if cmp -s file1.txt file2.txt; then echo "Files are identical"; else echo "Files are different"; ficut
擷取文件的部分內容
# 擷取帳號名稱及家目錄
cut -d : -f 1,6 /etc/passwddelta
現代化 diff 工具,支援語法高亮、行號與 git 整合
# 比較兩個文件
delta file1.txt file2.txt
# 與 git 整合(在 ~/.gitconfig 設定)
# [core]
# pager = delta
# [delta]
# line-numbers = true
# side-by-side = true
# 並排顯示
delta --side-by-side file1.txt file2.txt
# 顯示行號
delta --line-numbers file1.txt file2.txtdiff
詳細比較兩個文件(顯示差異)
diff file1.txt file2.txt以並排顯示差異並附帶行號
diff -y --suppress-common-lines file1.txt file2.txtfzf
模糊搜尋工具,支援互動式選擇
# 在當前目錄模糊搜尋
fzf
# 預覽文件內容
fzf --preview 'cat {}'
# 與其他命令結合
vim $(fzf)
cd $(find . -type d | fzf)
# 歷史命令搜尋(通常綁定到 Ctrl+R)
history | fzf
# 多選模式
fzf -m
# 指定搜尋路徑
find /var/log -name "*.log" | fzf常用快捷鍵:
Ctrl+J/K: 上下移動Enter: 選擇Tab: 多選標記Ctrl+C: 取消
grep
文本搜尋
# 基本用法
grep Port /etc/ssh/sshd_config
# 常用選項
# -i : 忽略大小寫
# -n : 顯示行號
# -c : 顯示匹配次數
# -v : 顯示不匹配的行
# -r : 遞歸搜尋
# 實例
grep -n Human characters.txt
grep -c Human characters.txt
grep -i human characters.txt
grep -r Error /var/loghead
打印隨機可讀字符
head -c 10 /dev/urandom | base64從 /dev/urandom 中讀取 100 字節並過濾出僅包含字母和數字的字符
head -c 100 /dev/urandom | tr -dc 'a-zA-Z0-9'less
分頁查看文件內容
| 參數 | 用途 | 什麼時候用 |
|---|---|---|
-R | 顯示 ANSI color | curl / docker / git log |
-S | 不自動換行 | 看 log / JSON |
-F | 一頁就直接顯示 | 短輸出 |
-X | 離開不清畫面 | 查完還想看 |
-n | 不預掃行號 | 超大檔案 |
-N | 顯示行號 | 小檔案 |
+G | 從檔案結尾 | 看最新 log |
+F | follow mode | live log |
# 查看整個文件
less -R -S -n server.log
# 常用快捷鍵
# q : 退出
# g : 到文件開頭
# G : 到文件結尾
# /search : 搜尋文本rg (ripgrep)
現代化 grep 替代品,速度更快、預設遞歸搜尋
# 基本搜尋(遞歸、忽略 .gitignore)
rg "pattern"
# 搜尋特定文件類型
rg -t py "import"
# 顯示上下文
rg -C 3 "error"
# 忽略大小寫
rg -i "error"
# 只顯示文件名
rg -l "TODO"
# 顯示行號(預設開啟)
rg -n "pattern"
# 搜尋隱藏文件
rg --hidden "pattern"
# 使用正則表達式
rg "log.*error"
# 反向搜尋
rg -v "pattern"
# 統計匹配數量
rg -c "pattern"sed
流編輯器
# 替換文本
sed 's/:/\n/g' <<< "$PATH"
# 修改文件
sed -i 's/Pineapple/Feta/' toppings.txt
# 組合使用
echo "hi" | sed 's/hi/goodbye/'sort
對文件進行排序
sort file1.txt > sorted1.txt
sort file2.txt > sorted2.txttail
查看文件尾部
# 追踪文件變化
tail -f server.log
# 指定行數
tail -n [number] [file]truncate
調整文件大小
# 創建指定大小的文件
truncate -s 1G fakefile.pdf
# 清空文件
truncate -s 0 file.loguniq
報告或忽略重複行
uniq [file]wc
統計文字數量
# 統計文件
wc helloworld.java
# 統計特定類型文件數量
ls *.py | wc -l