介紹
做運維的應該經常用sed和awk等這些工具,但要想把他們用得好絕非易事,需要長時間的積累,
正文1 如何在shell中獲取字串string的長度
echo $
2 替換檔案text中乙個或多個空格
sed -i "s/ \+/||/g" test
注釋:\+意思是之前字元的乙個或多個
3 刪除檔案text中「[」和「]」兩個字元
sed -i -e "s/\[//g" -e "s/\]//g" text
4 刪除noauto關鍵字和找到匹配行然後替換
sed -i -e 's/,noauto//g' -e '/hadoop/s/\s*$/0/g' /etc/fstab
4 文字text的每一列以逗號分隔,現在要刪除第六列,然後輸出其他列,每一列以空格分隔
awk 'begin'
5 輸出每個使用者所占用的cpu百分比
top -bn 1 | awk '' | awk 'end' | sort -nr
6 統計nginx的access.log中每個url的訪問數和流量,輸出前10名
awk '' access_2010-12-8.log|awk 'end'|sort -rn|head -10
7 for迴圈輸出連續字串
for i in hadoop ; do echo $i ; done
8 寫awk指令碼來獲取每行中匹配正規表示式的字段
text.awk
begin
}}end
執行
awk -f text.awk text
9 返回匹配的字串
for i in $(cat text) ; do ls dir/ | grep $i > /dev/null ; if [ $? -ne 0 ] ; then echo $i ;fi ; done
根據返回值:$?是否為0,判斷是否輸出字串。
10 獲取磁碟裝置名與label之間的對應關係
for i in $(fdisk -l | grep "disk /dev/sd" | awk '' | awk -f ":" '') ; do echo $i "---" $(e2label $1); done
11 合併雙數行到奇數行
awk 'nr%2' file.txt
nr%2表示的意思是行數不能被2整除的行,是條件語句。
printf是定義輸出格式
next表示下一行
print表示輸出所有行,不管是否是奇數行
上面的命令還可以這樣寫:
awk 'nr%21' file.txt
1表示始終為真的意思,也就是輸出所有行。
若用sed上面的命令可以這樣寫:
sed 'n;s/\n/ /' file.txt
n表示的是整合每兩行為一行。
12 利用awk進行行過濾,並得到硬碟空間最小的碟符
awk '!/^major/ && !/^$/ && ($4 !~ /[a-z]*[0-9]/) ' /proc/partitions | awk 'begin ; };
end '
這行命令先排除掉以major開頭的行,再排除空行,最後排除以數字結尾的行,之後再迴圈得到硬碟空間最小的碟符。
13 if語句裡面有多個條件
for i in $(awk '' /proc/partitions) ; do parted -s /dev/$i rm 1 ; done
14 根據hadoop的namenode的jsp的jmx頁面的資料,統計每個rack對應的硬碟使用情況
先把第二列過濾下,獲取前三個字段
awk '' file
再根據第二列,統計最後一列的值並求和
awk ' end ' file | sort -r -k 2
sed,awk簡單使用
sed是一種非互動式的流編輯器,可動態編輯檔案。sed的工作模式是對比每一資料行,若如何樣式,就執行指定的操作。語法格式 sed 樣式命令 檔案 如果檔案中某一行符合 樣式命令 就執行指定的sed命令,如刪除 d 替換 s 輸出 p 這裡的 樣式命令 使用一對 括起來,表示尋找。例如 1 1,6 表...
sed awk擷取日誌
awk 字串1 a file sed n 字串1 n b2 file awk 字串1 a file sed n 字串1 m x lzj p b x file 擷取兩個字串之間日誌 n 匹配行的下一行 n 追加到下一行 p 列印 p 列印到 n b 無條件跳轉 未匹配後面不執行 t 有條件跳轉 未匹配...
sed awk 資料的檢索
在格式化文字中查詢縮寫詞相應的完整詞語,如輸入 basic 返回其全稱 beginner s all purpose symbolic instruction code 下面這個縮寫詞列表可理解為乙個簡單的資料庫 zhanhailiang linux 06bq cat acronyms basic ...