歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

shell編程-正則表達式

1.正則表達式是什麼

它主要用於字符串的模式分割,匹配,查找及替換操作。

2、正則表達式與通配符

正則表達式用來在文件中匹配符合條件的字符串,正則包含匹配。grep,awk,sed等命令可以支持正則表達式。

通配符用來匹配符合條件的文件名,通配符是完全匹配。ls ,find,cp這些命令不支持正則表達式,所以只能使用shell自己的通配符進行匹配了。

3.基礎正則表達式

 .相當於通配符的?

[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}

[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\

3.字符截取命令

cut [選項] 文件名

-f 列號:提取第幾列

-d:分隔符:按照指定分隔符分割列,默認分隔符是tab鍵(制表符)

ID name gender Make
1   nyan     n       89
2   luke      l        87
3   mak      n       67

cut -f 1,3 student.txt

grep "/bin/bash" /etc/passwd | grep -v "root" | cut -f 1 -d ":"

 

printf  '輸出類型輸出格式' 輸出內容

輸出類型:

%ns:輸出字符串。n是數字指代輸出幾個字符

%ni:輸出整數。n是數字指代輸出幾個數

%m.nf:輸出浮點數.m和n指代輸出整數位和小數位位數

printf不支持管道符,所以printf $(cat 2.txt)

 

awk '條件1{動作1}條件2{動作2}...' 文件名

條件Pattern:

一般使用關系表達式作為條件:>,<>=,<=

動作Action:

格式化輸出

流程控制語句

awk '{printf $2 "\t" $4 "\n"}' student.txt

BEGIN: awk 'BEGIN{print "test"}{print $2 "\t" $4}' student.txt

FS內置變量: cat /etc/passwd |grep /bin/bash |awk '{FS=":"}{print $1 "\t" $3}'

如果沒有加BEGIN,則是先讀取數據賦值給指定變量$n,再告訴FS是":"作為分隔符,此時已晚。

cat /etc/passwd |grep /bin/bash |awk 'BEGIN{FS=":"}{print $1 "\t" $3}'

 

sed字符替換命令

sed [選項] '[動作]' 文件名

-n:一般sed命令會把所有數據輸出到屏幕,如果加入此選擇,則只會把經過sed命令處理的行輸出到屏幕。

-e:允許對輸入數據應用多條sed命令編輯

-i:用sed修改結果直接修改讀取數據的文件,而不是有屏幕輸出。

動作:

a:追加,在當前行後添加一行或多行

c:行替換,用c後面的字符串替換源數據行

i:插入,在當前行插入一行或多行。

d:刪除指定行

p:打印,輸出指定的行

s:字符串替換,用一個字符串替換另外一一個字符串。格式為 "行范圍s/舊字符串/新字符串/g"

sed -n '2p' student.txt

sed '2a 3 f v m' student.txt

sed '2,4d' student.txt

前面數字是行號

 

4.字符處理命令

sort [選項] 文件名

-f:忽略大小寫

-n:以數值型進行排序,默認使用字符串型排序

-r:反向排序

-t:指定分隔符,默認是分隔符是制表符

-k n[,m]:按照指定的字段范圍排序。從第n字段開始,m字段結束(默認到行尾)

sort -n -t ":" -k "3,3" /etc/passwd

wc:統計命令

wc [選項] 文件名

-l:只統計行數

-w:只統計單詞數

-m:只統計字符數

Copyright © Linux教程網 All Rights Reserved