shell腳本學習進階和正則表達示的應用
阿新 • • 發佈:2017-11-26
exec delete width 處理 append 轉義 標簽 image 查找
Sort 排序:
-f: 忽略字符大小寫 -n: 比較數值大小 -t: 指定分隔符 -k: 指定分隔後進行比較字段序號 -u: 重復的行,只顯示一次
按第二行數值排序:
$ sort -k2n sort.txt ccc 8 aaa 11 yyy 12 eee 22
重復行顯示一次:sort -u sort.txt
uniq 處理重復行,與sort配合使用:
wc命令:
行 | 字符 | 單詞 $ wc sort.txt 6 12 41 sort.txt $ wc -l sort.txt 6 sort.txt $ wc -c sort.txt 41 sort.txt $ wc -w sort.txt 12 sort.txt
find命令:
按名字查找 $ find ./ -name "*.sh" 查找當前一級目錄下的普通文件 $ find ./ -maxdepth 1 -type f 查找大小在1M到5M之間的 $ find ~ -size +1M -size -5M 查找log目錄10天之前創建的文件 $ find ~/log -ctime +10 查找log目錄5天內創建的文件 $ find ~/log -ctime -5
ls命令不能讀管道或者標準輸入,可以使用 exec代替:
find ~/log -ctime +10 -exec ls -la {} \;
使用ok選項更安全,會要求確認:
find ~/log -ctime +10 -ok rm - f {} \;
當然了,還可以使用 xargs 將前一個命令的輸出結果,分成小塊解析:
find ./ -maxdepth 1 -type -f | xargs ls -l
grep命令可以進行內容的查找:
-r 遞歸子目錄
-i 忽略大小寫
-v 排除
正則表達示:
字符類:
數量限定:
位置限定符:
特殊字符:
可以使用egrep命令,支持擴展的正則表達示:
例子1:匹配出所有IP地址 XXX.XXX.XXX.XXX
egrep ‘^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$‘ all.txt
例子2:匹配郵箱 [email protected]|CN
egrep ‘ [0-9a-zA-Z]+@[0-9a-zA-z]+\.(com|cn)$‘ all.txt
註意:目前分為基礎正則和擴展正則,基礎正則不支持 ?+ { } | ().
如果想支持,需要轉義字符,寫的定要先寫擴展正則,在寫基礎正則。
grep ‘[0-9a-zA-z]\+@[0-9a-zA-Z]\+\.\(com|cn\)$‘ all.txt 或者 grep -E ‘[0-9a-zA-z]+@[0-9a-zA-Z]+\.(com|cn)$‘ all.txt
最後,對匹配IP地址在進行一次優化:
$ egrep ‘^([0-9]{1,3}\.){3}[0-9]{1,3}$‘ all.txt
SED工具,stream editor 流編輯器,和VI同源,處理文件,對文本進行修改!
常見用法:
sed option ‘script‘ file1 file2 ... ’‘ sed 參數 ‘腳本(/pattern/action)’ 待處理文件 sed option -f scriptfile file1 file2 ... sed 參數 –f ‘腳本文件’ 待處理文件
參數說明:
a, append 追加 i, insert 插入 d, delete 刪除 s, substitution 替換
例子:在第二行插入XXXX
sed ‘2ixxxx‘ cash.sh
-i 是直接修改源文件,需要謹慎使用
刪除第4-6行:
sed ‘4,6d‘ cash.sh
替換read 為write:
sed ‘s/read/write‘ cash.sh
SED常用指令:
/pattern/p 打印匹配pattern的行 /pattern/d 刪除匹配pattern的行 /pattern/s/pattern1/pattern2/ 查找符合pattern的行,將該行第一個匹配pattern1的字符串替換為pattern2 /pattern/s/pattern1/pattern2/g 查找符合pattern的行,將該行所有匹配pattern1的字符串替換為pattern2
例如,匹配echo 並打印該行:
sed ‘/echo/p‘ cash.sh
此時會顯示多一行,如果需要不輸入源文件內容,可以使用:
sed ‘/echo/p‘ cash.sh -n
刪除case所在行 $ sed ‘/case/d‘ case.sh 將echo替換為print $ sed ‘/echo/s/echo/print/g‘ case.sh
地址符號的使用:
sed ‘s/23/-&-/‘ cash.sh
\1 \2 代表對應的第一個單元 和 第二個單元
-r 可以使用拓展正則
去掉Html標簽:
sed -r ‘s/<[(/|0-9a-zA-Z)]+>//g‘ hello.html 或者 sed -r ‘s/<[^<>]+>//g‘ hello.html
shell腳本學習進階和正則表達示的應用