天天看點

linux grep-find-sed-awk 過濾查找修改檔案grep 過濾文本find 查找檔案sed 替換文本awk 分隔文本

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
           

繼續閱讀