格式化顯示printf正則表達式
printf ‘打印格式’ 實際內容centos
關於格式的幾個樣式:bash
\a :警告聲音輸出ide
\b:退格鍵(backspace)工具
\f:清除屏幕spa
\n:輸出新的一行命令行
\r:即enter按鍵server
\t:水平的tab按鍵ip
\v:垂直的tab按鍵字符串
\xNN:NN爲兩位數的數字,能夠轉換數字成爲字符
關於C語言內,經常使用的變量格式:
%ns n爲數字,s表明string ,即多少個字符
%ni n爲數字,i表明integer 即多少個整數字數
%N.nf n與N都是數字,f表明floating(浮點),有小數位數,假設要10位,但小數點有兩位,即爲%10.2f
[root@centos5 ~]# printf '%s\t %s\t %s\t %s\t %s\t \n' `cat aa.log`
[root@centos5 ~]# printf '%10s %5i %8.2f \n' `cat printf.txt|grep -v name`
sed工具:
sed [-nefr] [動做]
-n 使用安靜(silent)模式,在通常sed的用法中,全部來自STDIN的數據通常都會顯示在屏幕上,但若是加上-n參數,則只有通過sed特殊處理的那一行纔會列出來
-e 直接在命令行模式上進行sed的操做編輯
-f直接將sed的操做寫在一個文件內,-f filename 則能夠執行filename內的sed操做
-r sed的操做支持的是擴展正則表達式的語法
function有下面這些操做:
a:新增,a的後面能夠接字符串,而這些字符串會在新的一行出現(當前的下一行)
c:替換 c的後面能夠接字符串,這些字符串能夠替換n1,n2之間的行
d:刪除,由於是刪除,因此d後面一般不接任何內容
i:插入,i的後面能夠接字符串,而這些字符串會在新的一行出現(當前行的上一行)
p:打印 即答應某個選擇的數據,一般p會與參數sed –n一塊兒運行
s:搜索,不但能夠搜索,還能進行替換,一般s操做能夠與正則表達式一塊兒使用 例如:1,20s/old/new/g
nl /etc/passwd |sed ‘2,5d’
在第二行後(便是加在第三行)加上「drinktea」字樣
nl /etc/passwd|sed ‘2a drink tea’
在第二行前加上「drinktea」字樣
nl /etc/passwd|sed ‘2i drink tea’
增長兩行怎麼寫呢:
nl /etc/passwd|sed ‘2a Drink tea or……\
>drink bear’ 重要的是\
將2到5行替換爲:no 2-5 number
nl /etc/passwd |sed ‘2,5c No 2-5 number’
nl /etc/passwd |sed –n ‘5,7p’
ifconfig etho|grep ‘inet’|sed ‘a/^.*addr://g’|sed ‘s/Bcast.*$//g’
[root@emailserver ~]# ifconfig eth0|grep 'inet addr:'|sed 's/^.*addr://g'|sed 's/Bcast.*$//g'
192.168.0.30
[root@emailserver ~]# cat /etc/man.config|grep 'MAN'|sed 's/#.*$//g'|sed '/^$/d'
MANPATH /usr/man
MANPATH /usr/share/man
MANPATH /usr/local/man
MANPATH /usr/local/share/man
MANPATH /usr/X11R6/man
MANPATH_MAP /bin /usr/share/man
MANPATH_MAP /sbin /usr/share/man
MANPATH_MAP /usr/bin /usr/share/man
MANPATH_MAP /usr/sbin /usr/share/man
MANPATH_MAP /usr/local/bin /usr/local/share/man
MANPATH_MAP /usr/local/sbin /usr/local/share/man
MANPATH_MAP /usr/X11R6/bin /usr/X11R6/man
MANPATH_MAP /usr/bin/X11 /usr/X11R6/man
MANPATH_MAP /usr/bin/mh /usr/share/man
MANSECT 1:1p:8:2:3:3p:4:5:6:7:9:0p:n:l:p:o:1x:2x:3x:4x:5x:6x:7x:8x
[root@emailserver ~]#
awk工具簡介:
與sed經常做用於正行處理相比,awk比較傾向於一行中分紅數個「字段」來處理。
awk ‘條件類型1{動做1} 條件類型2{動做2} 。。。。’ filename
[root@emailserver ~]# last|awk '{print $1 "\t" $3}' $0表明了一整行數據的意思。、
awk是以行爲單位處理,而 以字段爲最小的處理單位。
awk內置變量:NF:每一行($0)擁有的字符總數
NR:當前awk所處理的是第幾行數據
FS:當前的分隔符,默認爲空格鍵
[root@emailserver ~]# 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
news 9
[root@emailserver ~]# cat /etc/passwd|awk -F ':' '$3<10 {print $1 "\t" $3}'
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
news 9
第一行沒有正確顯示出來,這是由於咱們讀入第一行的時候,那些$1,$2等默認仍是以空格做爲分隔的,因此雖然定義了FS=:卻只能從第二行開始生效,咱們可使用BEGIN關鍵詞預先設置awk的變量,以下所示:
[root@emailserver ~]#cat /etc/passwd|awk ‘BEGIN {FS=」:」} $3<10 {print $1 「\t」 $3}’
[root@emailserver ~]# cat pay.txt| awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} NR>=2{total=$2+$3+$4
> printf "%10s %10d %10d %10d %10.2f\n",$1,$2,$3,$4,total}'
Name 1st 2nd 3th Total
VBird 23000 24000 25000 72000.00
DMTSai 21000 22000 23000 66000.00
Bird2 43000 42000 41000 126000.00
[root@emailserver ~]# cat pay.txt| awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} NR>=2{total=$2+$3+$4;printf "%10s %10d %10d %10d %10.2f\n",$1,$2,$3,$4,total}'
Name 1st 2nd 3th Total
VBird 23000 24000 25000 72000.00
DMTSai 21000 22000 23000 66000.00
Bird2 43000 42000 41000 126000.00
[root@emailserver ~]#
文件數據比較與顯示的相關功能
diff 文件比較
diff [-bBi] from-file to-file
-b 忽略一行中有多個空白的差別
-B 忽略空白行的不一樣
-i:忽略大小寫的不一樣
[root@emailserver ~]# diff /etc/passwd /tmp/passwd
4d3
< adm:x:3:4:adm:/var/adm:/sbin/nologin
6c5
< sync:x:5:0:sync:/sbin:/bin/sync
---
> no six line
[root@emailserver ~]#
patch命令
patch –p1 </tmp/test.patch -p就是取消第幾層的意思
backdate=`date +%Y%m%d`
filename=」$filename」」$backdate」
total=$(($firstnu*$secnu)) declare –I total=$firstnu*$secnu
13.3 善用判斷條件
test -e filename
-e 該文件名是否存在
-f 是否爲文件
-d是否爲目錄
test n1 –eq n2
-eq 兩數值相等
-ne 兩數值不等
-gt n1 大於n2
-lt n1 小於n2
-ge n1大於等於n2
-le n1小於等於n2
判斷字符串的數據
test –z string 判斷字符串是否爲0 若string爲空字符串 則爲true
test –n string 判斷字符串是否非爲0 ,若string爲空字符串 則爲false 注: -n亦可省略
test str1=str2 判斷str1是否等於str2 若相等 則回傳true
test str1!=str2判斷str1是否等於str2 若不相等 則回傳false
使用判斷符號[]
判斷$HOME變量是否爲空
[ -z 「$HOME」 ] 每一個組件之間都要有空格
[空格」$HOME」 空格==空格」$MAIL」 空格]
重要的一點就是凡是常量都用變量表示,否則會杯具好比說
[ $name == 「VBird」 ] 就是個杯具,杯具的緣由就是表達式會把name的值直接帶進來,而沒有雙引號,因此最好把VBird定義成變量 好比 enname=VBird
[ $name == $enname ]
sh [-nvx] scripts.sh -n 不執行腳本,只檢查語法 -v 執行腳本前,先將腳本的內容輸出到屏幕上 -x 將使用的腳本內容顯示到屏幕上。