天天看點

shell檔案處理工具

vim /etc/resolve.conf 檢視dns

6.shell腳本指令

 1.diff

diff        file file   比較兩個檔案的不同

    -c         顯示周圍的行

    -u          按照一格式統一輸出生成更新檔

    -r          比較兩個目錄中檔案的不同

pattch      file    file.path   打更新檔

    -b              備份原檔案

2.grep

grep    關鍵字元    檔案|目錄   在檔案或目錄中查找含有關鍵字的行

grep    -i              忽略大小寫

    -n              顯示關鍵字所在行

    -c              顯示過濾結果的行數

    -v              反向過濾

    -E      “關鍵字1|關鍵字2”    過濾多個關鍵字

    -r      目錄        在目錄中查找含有關鍵字的檔案

注意:^關鍵字   以關鍵字開頭

      關鍵字$   以關鍵字結尾    

^root 以root開頭

root$ 以root結尾

3.cut

cut 截取字元

cut -d  分隔符  指定分隔符

cut -f  1,7    顯示指定的列

cut -c      顯示指定字元

cut -d " " -f 10    截取空格後第十列到下一個分隔符空格之間的内容

4.sort 排序

sort 

    -n  純數字排序

    -u  去掉重複的

    |uniq -c去掉重複并統計重複個數

    -t  指定分隔符

    -k  指定列

sort -t : -k 2 file -nu

5.uniq

sort file | uniq -c 去掉多餘并統計重複次數  

         -d 顯示多餘行

         -u 顯示唯一的行

6.tr

tr 'a-z' 'A-Z' file

sed 's/原字元/替換字元/g' file

sed -e '政策1 ' -e '政策2 'file  多個政策用-e

sed -i file 把轉入後的檔案輸出到指定檔案

sed '3,5s/原字元/替換字元/' file

sed xd 屏蔽指定行

sed xp 複制指定行

sed -n xp 隻顯示指定行

腳本

#!/bin/bash

MAX=$( wc- l $1 | cut -d " " -f 1)

for NUM in $( seq $MAX )

do

        USERNAME=$(sed -n ${NUM}p$1)

        PASSWD=$(sed in ${NUM}p $2)

        useradd $USERNAME

        echo $PASSWD | passwd --stdin$USERNAMR

done

7.awk   資料處理工具,将一行分成數個段進行處理,以字段為最小的處理機關

awk '條件類型1{動作1} 條件類型2{動作2}...' filename

[root@taxing ~]# last -n 5

kiosk    pts/0        :0               Wed Nov  9 19:46  still logged in   

kiosk    pts/0        :0              Wed Nov  9 18:57 - 19:46  (00:48)   

kiosk    :0           :0               Wed Nov  9 18:57  still logged in   

reboot   system boot  3.10.0-327.el7.x Thu Nov 10 02:56 -19:59  (-6:-57)   

kiosk    :0           :0               Wed Nov  9 17:55 - 17:55  (00:00)   

wtmp begins Wed Sep 28 00:38:05 2016

[root@taxing ~]# last -n 5 | awk '{print $1 "\t" $3}'

kiosk   :0

reboot  boot

$0 代表一整行的資料

内置變量

NF 每一行($0)擁有的字段總數

NR 目前awk處理的是第幾行的資料

FS 目前的分隔字元,預設是空格鍵

[root@taxing ~]# last -n 5 | awk '{print $1 "lines:" NR "\tcolumes: "NF}'

kiosklines:1     columes: 10

kiosklines:2     columes: 10

kiosklines:3     columes: 10

rebootlines:4    columes: 11

kiosklines:5     columes: 10

lines:6  columes: 0

wtmplines:7  columes: 7

條件類型

[root@taxing ~]# cat /etc/passwd | awk '{FS=":"} $3<10 {print $1"\t" $3}'

root:x:0:0:root:/root:/bin/bash 

bin 1

daemon  2

adm 3

lp  4

sync    5

shutdown    6

halt    7

mail    8

第一行還是預設的以空格鍵為分隔符,想要從第一行開始就在分隔符 {FS=":"} 前加 BEGIN 關鍵字  除此之外還有END

[root@taxing ~]# cat /etc/passwd | awk 'BEGIN{FS=":"} $3<10 {print$1 "\t" $3}'

root    0

awk指令進行計算

name    1st 2nd 3th

zed 12321   34123   41234

timo    23413   34124   35213

lol 34223   12441   22341

 cat file | awk 'NR==1{printf "%10s%10s %10s %10s %10s\n",$1,$2,$3,$4,"TOTAL"}NR>=2{TOTAL=$2+$3+$4 printf"%10d %10d %10d %10d%10.2f\n,$1,$2,$3,$4,TOTAL}'

本文轉自   Taxing祥   51CTO部落格,原文連結:http://blog.51cto.com/12118369/1871427

上一篇: LVM
下一篇: 分區