1. 程式人生 > >Linux下find、awk、sed、grep命令的例子

Linux下find、awk、sed、grep命令的例子

開發十年,就只剩下這套架構體系了! >>>   

find:搜尋工具

# 列出當前目錄及子目錄下所有檔案和資料夾
find .
# 在/home目錄下查詢以.txt結尾的檔名,-i表示忽略大小寫
find /home -iname "*.txt"

find命令的詳細介紹

awk:資料快速處理

# test.txt
2 this is a test
3 Are you like awk 
This's a test
10 There are orange,apple,mongo
# 指定,為分隔符,在test中查詢,並且輸出分隔之後的每行的第一、第四個元素。分隔符預設為空格(包括tab)
awk -F, '{print $1,$2}' test.txt

2 this is a test 
3 Are you like awk 
This's a test 
10 There are orange apple

# 格式化輸出,第一個元素和第四個元素的佔位
awk '{printf "%-8s %-10s\n",$1,$4}' log.txt

2        a
3        like
This's
10       orange,apple,mongo

# 設定變數-v引數,a=1,如果原有元素為非數字則進行運算時為0
awk -va=1 '{print $1,$1+a}' log.txt

2 3
3 4
This's 1
10 11

# 將awk命令存為指令碼儲存,使用-f引數作為允許指令碼
awk -f cal.awk log.txt

# 過濾第一項大於2的行(很神奇的是,這裡的非數字不能作為0來比較)
awk '$1>2' log.txt

3 Are you like awk
This's a test
10 There are orange,apple,mongo

# 過濾第一列大於2並且第二列等於'Are'的行
awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt

3 Are you

awk命令詳細介紹

sed:文字替換

# old.txt中的old_abc換為new_abc,s表示替換,g表示每行中找到的字元都需要被替換,否則只替換每行第一次出現的字元, '1,2s'表示第一行到第二行的所有行
# sed不能在原有文字基礎上進行替換,所以必須生成新的檔案new.txt
sed "1,2s/old_abc/new_abc/g" old.txt > new.txt
# 刪除行號範圍內指定的行
sed -i "1,2d" old.txt
# 刪除模式匹配的行
sed -i "/abc/d" old.txt
# 刪除與替換同時進行,加上-e引數,替換old_abc為new_abc,並且刪除第二行
sed -i -e "s/old_abc/new_abc/g" -e "2d" old.txt
# s指令後面並不一定使用/作為分隔符,可以加上#,比如s#/

grep:文字搜尋

Global Regular Expression Print(全域性正則表示式列印)

# 輸出test.txt中搜索含有'abc'或'Abc'的行
grep '[aA]bc' test.txt
# 輸出test.txt中搜索含有'abc'的行,-i表示忽略大小寫
grep -i 'abc' test.txt
# 輸出test.txt中搜索含有'abc'的前三行、後三行,-A(After)匹配行之後,-B(Before)匹配行之前
grep "abc" -A 3 -B 3 test.txt


grep一般結合其他命令來用

grep也可以使用正則進行匹配

  1. fgrep:fast grep等於grep -F,不支援正則表示式
  2. egrep:extended grep等於grep -E,支援擴充套件的正則表示式

命令合成

# 在當前目錄下查詢名稱字尾為.log的檔案,並且將輸出轉換為一行(xargs),找到abc。-i表示忽略大小寫,-n表示輸出行號
find . -name "*.log" | xargs grep -i -n "abc"
# -l輸出匹配的檔名,不輸出匹配行;-R表示遞迴目錄;-Z表示檔名間使用null進行分隔
# -0表示xargs只格式化一個檔案
fgrep -lRZ "1.2.3.4" . | xargs -0 sed -i -e "s/1.2.3.4/5.6.7.8"

總結

  • 三個命令的運用形式 
    grep ‘字元’ 檔案 
    sed ‘命令’ 檔案 
    awk ‘條件{命令}’ 檔案
  • 單引號內就是正則表