Linux文本操作相關命令行
- **一、文本查找與匹配**
- `grep` - 文本搜索神器
- `findstr` (Windows 可用)
- **二、文本替換**
- `sed` - 流編輯器
- `tr` - 字符替換
- **三、文本提取與截取**
- `cut` - 按列提取
- `awk` - 文本處理編程語言
- **四、文本統計與分析**
- `wc` - 字詞統計
- `uniq` - 去重
- `sort` - 排序
- **五、文件操作與格式化**
- `paste` - 合併行
- `column` - 格式化輸出
- `fold` - 摺疊長行**
- **六、高級組合技巧**
- **管道(|)與重定向(> >>)**
- **排除文件**
- **七、實用腳本示例**
- **1. 刪除重複行**
- **2. 提取 URL**
- **3. 統計日誌訪問量**
- **八、調試技巧**
- **1. 顯示命令執行過程**
- **2. 逐行執行腳本**
- **附:命令速查表**
一、文本查找與匹配
grep - 文本搜索神器
# 查找文件中包含 "error" 的行
grep "error" filename.log
# 匹配正則表達式(例如郵箱)
grep -E "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" emails.txt
# 忽略大小寫
grep -i "pattern" file.txt
# 顯示匹配行號
grep -n "pattern" file.txt
# 統計匹配次數
grep -c "pattern" file.txt
findstr (Windows 可用)
# 查找包含 "success" 的行
findstr /C:"success" file.txt
二、文本替換
sed - 流編輯器
# 將 "old" 替換為 "new"(僅替換第一處)
sed 's/old/new/' file.txt
# 全局替換
sed -i 's/old/new/g' file.txt # -i 直接修改原文件(Linux)
# 示例:刪除註釋行(以 # 開頭)
sed '/^#/d' script.sh
tr - 字符替換
# 將空格替換為逗號
tr ' ' ',' input.txt > output.csv
# 刪除特定字符(如刪除空行)
tr -d '\n' file.txt
三、文本提取與截取
cut - 按列提取
# 提取第2-5列(字段分隔符默認為空格)
cut -d ' ' -f2-5 filename.log
# 提取以冒號分隔的第3部分(如 IP:端口)
cut -d ':' -f3 /etc/passwd
awk - 文本處理編程語言
# 打印每行的第一個字段
awk '{print $1}' file.txt
# 統計單詞數量
awk '{words++} END {print words}' file.txt
# 示例:提取郵箱地址
awk '/@/ {print $0}' emails.txt
四、文本統計與分析
wc - 字詞統計
# 統計行數、單詞數、字符數
wc filename.txt
# 僅統計行數
wc -l filename.txt
# 僅統計單詞數
wc -w filename.txt
uniq - 去重
# 對排序後的文件去重
sort file.txt | uniq
# 統計重複次數
uniq -c sorted_file.txt
sort - 排序
# 按字母順序排序
sort file.txt
# 按數值排序(保留原始格式)
sort -n numbers.txt
# 逆序排序
sort -r log.txt
五、文件操作與格式化
paste - 合併行
# 將兩列文件合併(按列對齊)
paste file1.txt file2.txt > combined.txt
# 列居中對齊
paste -d '|' -s file.txt
column - 格式化輸出
# 將文本按指定寬度對齊
column -t -s ' ' input.txt
fold - 摺疊長行**
# 每行最多20個字符
fold -w 20 long_file.txt
六、高級組合技巧
管道(|)與重定向(> >>)
# 查找錯誤並保存結果
grep "error" /var/log/syslog | grep -v "ignored" > errors.log
# 分步處理:壓縮 -> 解壓 -> 查找
tar -xzvf data.tar.gz | grep "keyword"
排除文件
# 在目錄中查找文件,排除子目錄
find . -type f -not -path "./.git/*" -exec grep "pattern" {} \;
七、實用腳本示例
1. 刪除重複行
#!/bin/bash
sort input.txt | uniq -d > unique.txt
2. 提取 URL
grep -oE "(http|https)://[^\" ]+" webpage.html
3. 統計日誌訪問量
awk '{count[$1]++} END {for (host in count) print host, count[host]}' access.log
八、調試技巧
1. 顯示命令執行過程
# 跟蹤 `sed` 的修改
sed -i.bak -e 's/foo/bar/' file.txt # 備份為 .bak
2. 逐行執行腳本
bash -x script.sh # 顯示每條執行的命令
附:命令速查表
|
命令
|
核心功能
|
典型場景
|
|
|
文本搜索
|
日誌分析、模式匹配
|
|
|
行級文本替換
|
批量修改配置文件
|
|
|
文本處理編程
|
數據清洗、報表生成
|
|
|
按列提取數據
|
CSV 文件處理
|
|
|
排序
|
數據預處理
|
|
|
去重
|
清理重複數據
|
|
|
統計字詞行數
|
文本長度分析
|
|
|
字符替換/刪除
|
格式轉換
|
|
|
合併行
|
數據合併
|
|
|
格式化輸出
|
製作表格
|
掌握這些命令後,結合管道(|)和重定向(>),可以高效完成絕大多數文本處理任務!