正規表示式學習筆記

2021-09-21 11:01:27 字數 4986 閱讀 9194

格式化顯示printf

printf 『列印格式』 實際內容

關於格式的幾個樣式:

\a :警告聲音輸出

\b:退格鍵(backspace)

\f:清除螢幕

\n:輸出新的一行

\r:即enter按鍵

\t:水平的tab按鍵

\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 條件型別2 。。。。』 filename

[root@emailserver ~]# last|awk '' $0代表了一整行資料的意思。、

awk是以行為單位處理,而 以字段為最小的處理單位。

awk內建變數:nf:每一行($0)擁有的字元總數

nr:當前awk所處理的是第幾行資料

fs:當前的分隔符,預設為空格鍵

[root@emailserver ~]# cat /etc/passwd |awk ' $3<10 '

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 '

root 0

bin 1

daemon 2

adm 3

lp 4

sync 5

shutdown 6

halt 7

mail 8

news 9

[root@emailserver ~]#cat /etc/passwd|awk 『begin $3<10 』

[root@emailserver ~]# cat pay.txt| awk 'nr==1 nr>=2'

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 nr>=2'

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 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 將使用的指令碼內容顯示到螢幕上。

正規表示式學習筆記

正規表示式學習日記 1 為萬用字元,表示任何乙個字元,例如 a.c 可以匹配 anc abc acc 2 在內可以指定要求匹配的字元,例如 a nbc c 可以匹配 anc abc acc 但不可以匹配 ancc a到z可以寫成 a z 0到9可以寫成 0 9 3 數量限定符號,表示匹配次數 或者叫...

正規表示式學習筆記

字元描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...

正規表示式學習筆記

1.正規表示式是可用於在乙個檔案或字元裡查詢和替代文字的一種標準。它具有兩種標準 基本的正規表示式 bre 擴充套件的正規表示式 ere ere包括bre功能和另外其它的概念。2.表示或運算 3.匹配任何單個字元 4.匹配任何中包含的單個字元,如 張王李 三,匹配張 三 王三,李三 5.將排除 後跟...