文字處理

文字檔案的查看、編輯、處理與分析

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/passwd

cat

檢視文件內容

# 檢視文件
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"; fi

cut

擷取文件的部分內容

# 擷取帳號名稱及家目錄
cut -d : -f 1,6 /etc/passwd

delta

現代化 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.txt

diff

詳細比較兩個文件(顯示差異)

diff file1.txt file2.txt

以並排顯示差異並附帶行號

diff -y --suppress-common-lines file1.txt file2.txt

fzf

模糊搜尋工具,支援互動式選擇

# 在當前目錄模糊搜尋
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/log

head

打印隨機可讀字符

head -c 10 /dev/urandom | base64

/dev/urandom 中讀取 100 字節並過濾出僅包含字母和數字的字符

head -c 100 /dev/urandom | tr -dc 'a-zA-Z0-9'

less

分頁查看文件內容

參數用途什麼時候用
-R顯示 ANSI colorcurl / docker / git log
-S不自動換行看 log / JSON
-F一頁就直接顯示短輸出
-X離開不清畫面查完還想看
-n不預掃行號超大檔案
-N顯示行號小檔案
+G從檔案結尾看最新 log
+Ffollow modelive 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.txt

tail

查看文件尾部

# 追踪文件變化
tail -f server.log

# 指定行數
tail -n [number] [file]

truncate

調整文件大小

# 創建指定大小的文件
truncate -s 1G fakefile.pdf

# 清空文件
truncate -s 0 file.log

uniq

報告或忽略重複行

uniq [file]

wc

統計文字數量

# 統計文件
wc helloworld.java

# 統計特定類型文件數量
ls *.py | wc -l