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:只統計字符數