grep 過濾文本
# 傳回檔案中比對正則的文本行
grep regex file
# 傳回檔案中不比對正則的文本行
grep -v regex file
# grep 搜尋檔案夾下的所有檔案
grep -r regex folder
# grep 搜尋檔案夾下的所有檔案,但隻傳回比對的檔案的檔案名
grep -rl regex folder
# 通過管道過濾其他程式的輸出
ps -ef | grep 'mysql'
find 查找檔案
# 查找目前目錄及其子目錄下所有的 html 檔案
find . -name '*.html' -type f
# find 預設遞歸查找目錄下所有的子目錄,設定了 maxdepth 限制查找子目錄的層級數
find . -maxdepth -name '*.html' -type f
# 查找目前目錄及其子目錄在 30 天之前建立的檔案
find . -name '*.log' -ctime +
sed 替換文本
# sed -i 表示直接修改文本并儲存,'s/find/replace/g' 表示全文替換
# 把目前目錄下lishan.txt裡的shan都替換為hua
sed -i "s/shan/hua/g" lishan.txt
# 替換網址時注意轉義特殊字元
sed -i "s#http://www\.baidu\.com?a=1&b=2#http://www.baidu.com?a=5\&b=6#g"
# 替換指令一般用/分隔,若和替換文本沖突可使用其他分隔符如 # 或 |
# sed 的正則中 + 和 ? 要轉義之後才表示正則意思,否則隻表示字面值
# 替換的字元中若有 & 預設是表示比對的字元串,要用字面值需要用 \& 進行轉義
# 結合其他指令實作批量替換文本
sed -i 's/hao/yes/g' `grep hao ./ -rl`
# 或
sed -i 's/hao/yes/g' `find . -name '*.html' -type f`
# 或
find . -name '*.html' -type f | xargs sed -i 's/hao/yes/g'
awk 分隔文本
# 提取輸入的第一個字段和第二個字段,然後将他們顯示出來,字段之間插入一個空格
# awk 預設使用 1 個或多個 tab 或 空格作為分隔符
ll | awk '{print $1,$2}'
# 從文本檔案獲得輸入
awk '{print $1,$2}' input.txt
# 指定分隔符
awk -F',' '{print $1,$2}' input.txt
# 分隔符可以用正則進行比對
awk -F',[ \t]*' '{print $1,$2}' input.txt