天天看點

Linux指令學習1(awk、grep、sed)

1、AWK内部代碼編寫(為了更好的了解)

BEGIN{size=0}
{
    if($5>4096){
    size=size+$5;
    printf("%-10i%s\n",$5,$9)}
}
END{print "size is",size/1024/1024}      

2、去掉回車,加上其他部分

ls -l|awk 'BEGIN{size=0}{if($5>4096){size=size+$5;printf("%-10i%s\n",$5,$9)}}END{print "size is",size/1024/1024}'      

目的:要檢視目前目錄中大于4kB的檔案的,并将其大小相加求出總大小。

3、檢視目前目錄大于4Kb的檔案

ls -l|awk '{if($5>4096)printf("%-10i%s\n",$5,$9)}'      

4、腳本中AWK使用

目的:shell腳本中除法隻能為整除,用AWK可以是小數

#!/bin/bash
resault=`ntpdate -q 172.17.0.21 172.17.0.22 |grep stratum |awk '{print $6}'|sed "s/,//g"|awk '{offset[NR]=$1}END{print offset[2]*1000000-offset[1]*1000000}'`
if [ $resault -lt 0 ]; then
        let resault=0-$resault
fi
if [ $resault -gt 100 ]; then
        #let resault=$resault/1000;
        echo "`date "+%Y-%m-%d %H:%M:%S"` NTP server 172.17.0.21 and 172.17.0.22 offset `awk 'BEGIN{printf"%.4f\n",'$resault'/1000}'` ms"
fi      

5、AWK常用參數 -F(表示已什麼為分隔符)

grep 'nologin$' /etc/passwd|awk -F ':' '{print $1}'      

目的:檢視nologin使用者

grep檢視以nologin結尾的行,AWK查詢以":"分隔的第一列的資訊

6、grep常用參數

  -c:列印符合要求的行數(及統計符合要求多少行)

     -i:忽略大小寫

     -n:列印符合要求的行,并顯示行号

     -v:反着打b印(及不包含符合要求的内容)

grep -c 'nologin$' /etc/passwd      

目的:查詢nologin使用者的個數

grep -v 'nologin$' /etc/passwd      

目的:查詢不是nologin使用者

7、sed

ip addr|sed -rn 's#^.*inet (.*)/24.*$#\1#gp'      

目的:過濾IP位址

-r:正則表達

-n:取消sed預設的列印,和p連用,列印比對行

 #(..)#\1:比對子串,儲存比對的字元

sed -i "s/Hostname=Zabbix server/Hostname=`ip addr|sed -nr 's#^.*inet (.*)/24.*$#\1#gp'|grep -v 192.168.122.1`/" /etc/zabbix/zabbix_agentd.conf      

目的:替換Zabbix server為本機IP