天天看點

cut、tee、split、xargs、bc指令

一、cut指令

cut 主要的用途在于将一行裡面的資料進行分解,最常使用在分析一些資料或文字資料的時候!這是因為有時候我們會以某些字元當作分割的參數,然後來将資料加以切割,以取得我們所需要的資料。

? 指令格式:

  cut -d "分隔字元" [-cf] fields

  -d :後面接的是用來分隔的字元,預設是空格符

  -c :後面接的是第幾個字元

  -f :後面接的是第幾個區塊(列)?

  cat /etc/passwd | cut -d ":" -f 1

  last | cut -d “ ” -f1 //以空格符為分隔,并列出第一列

  last | cut -c1-20 //将 last 之後的資料,每一行的 1-20 個

  字元取出來

二、tee指令

   将資料輸出重定向到檔案的時候,螢幕上就不會出現任何的資料!那麼如果我們需要将資料同時顯示在螢幕上跟檔案中呢?這個時候就需要 tee 這個指令。

    last | tee last.list | cut -d " " -f1

三、split指令

    将大的檔案分割成小的檔案

    -b size 來将一個分割的檔案限制其大小

    -l line以行數來分割

    split -l 5 /etc/passwd test <==會産生testaa, testab, testac... 等等的小檔案

dd if=/dev/zero bs=1000k count=10 of =1.date

split -b 1000000 1.dat abc

四、xargs

    xargs從标準輸入中接受單詞清單的指令,并把 這些單詞作為參數傳遞給指定的指令

    ls |xargs rm//把ls列出的内容再通過rm删除可以每次删除一部分檔案

    ls |xargs –n 2 rm

    ls | xargs –n 2 echo “==>”

    有時目錄裡檔案太多了不能使用rm *删除這時

    ls | grep ‘^abc’ |xargs –n 20 rm

    ls abcd*|xargs -i cp {} /tmp

五、bc指令

    bc指令:進行算術運算,但不限于整數運算

    $bs

    scale=4 //表示計算結果保留4位小數

  2+3

  2-3

  2*3

  8/3

  quit

    bc還可以用在shell變量指派中

  ABC=`echo “scale=4;8/3” | bc`

  echo $ABC

====================================

shell字元串操作:

前景色:30 黑色 31紅色  32綠色  33黃色  34藍色  35紫紅  36青色  37白色

背景色:40          41         42         43         44         45         46         47

echo -e "\033[32;40m"ok "\033[0m"

#!/bin/bash

a="**********************************************"

for i in {30..37}

do

        for n in {40..47}

        do

        echo -e "\033[$i;${n}m"$a"\033[0m"

done

done

----------------------------------

[root@localhost ~]# path=$PATH

[root@localhost ~]# echo $path

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

[root@localhost ~]# echo ${path#/*kerberos} <---1個#是最小比對從前向後删除

/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

[root@localhost ~]# echo ${path##/*kerberos} <---2個#是最大比對從前向後删除

/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

[root@localhost ~]# echo ${MAIL%r*}<------%是從後向前删除

/var/spool/mail/

[root@localhost ~]# echo ${MAIL%%r*}<----%%是最大比對

/va

[root@localhost ~]# echo ${#MAIL}<----統計變量字元長度

20

統計字元小于30的行就添加一個空行

#!/bin/bash

while read line

do

        a=${#line}

        echo $line

        if [ $a -lt 30 ];then

                echo

        fi

done < $1

~          

 echo ${path/bin/BIN}<-----把第1個bin替換成BIN

/usr/kerberos/sBIN:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

echo ${path//bin/BIN}<-----加2個//表示全部替換

/usr/kerberos/sBIN:/usr/kerberos/BIN:/usr/local/sBIN:/usr/local/BIN:/sBIN:/BIN:/usr/sBIN:/usr/BIN:/usr/X11R6/BIN:/root/BIN

echo ${abc//[0-9]/}

判斷輸入的是數字還是字元串

    #!/bin/bash

    read -p "please input:" a

    b=${a//[0-9]/}

    if [ -z $b ];then

        echo "your input is number!"

    fi

var=${str:-newvar} 當str是空的時候 var=newvar ,str不為空的時候var=$str

var=${str:=newvar} 當str是空的時候 var=newvar str=newvar ,str不為空的時候var=$str

建立檔案如果不輸入檔案名則預設建立abc這個檔案。

#!/bin/bash

read -p " please create file [abc] :" f

 a=${f:-abc}

cd /tmp

touch $a

-------

#!/bin/bash

read -p " please create file [abc] :" f

 a=${f:-abc}

 b=`date --date="1 days ago" +%F`

 c=`date --date="2 days ago" +%F`

 d=`date +%F`

cd /tmp

touch $a.{$b,$c,$d}

備份/root目錄下的 sh檔案到/tmp/backup用時間建立檔案夾 再次備份時比較檔案更新時間,比上一次新的才備份

#!/bin/bash

a=/tmp/backup/`date +%F.%H:%M`

cd /root

if [ ! -e $a ];then

        mkdir -p $a

fi

for i in `find *.sh`

 do

         find /tmp/backup -newer $i | grep -q $i

        if [ $? -ne 0 ];then