linux 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 1 -name '*.html' -type f 

# 查找當前目錄及其子目錄在 30 天之前創建的文件
find . -name '*.log' -ctime +30 

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章