今天閒著沒事,把以前寫的shell再拿出來看好多都忘記了,於是自己用看了一邊資料:
.表是單個字元
^一行的開始 ^d以開頭的 ^..1 第三個為1的字元 ^字元要放在匹配的字元前面
$一行的末尾 ^$ 表示空行 ^.$匹配一行乙個字元的 $字元要放在匹配的字元後面
*匹配任意個字元 包括0個字元
\可以遮蔽乙個特殊的字元 \*\.pas 這裡的*是特殊字元,這樣就表示*.pas這個檔案
逗號可以分割不同的匹配字元如[s,s]表示s或者s都可以
-表示乙個範圍,[1-9],[a-z],[a-z] [1-9 a-z a-z]任意的字元或者數字
a\b 表示a出現了2次 aab
a\b 表示a至少出現4次 aaaab,aaaaab
a\b 表示a出現2-4次 aab aaab aaaab
[0-9]\\.[0-9]\\.[0-9]\\.[0-9]\ 0-999.0-999.0-999.0-999
查詢檔案的時候 find 用到的
find pathname -options [-print -exec -ok]
-name -perm 許可權 -user -group -mtime -n +n -atime -ctime 檔案的時間 -size -nogroup 無有效屬組的檔案/etc/group 下不存在 -nouser 無有效使用者的檔案/etc/passwd
-newer file1 !file 比檔案一新但比檔案2舊的檔案 -type [bdcplf] 檔案型別
find . -name "*.rep" -print 匹配了含有.rep的檔案,-print 可以不用寫
find . -name "[a-z]*" -print 當前目錄下以大寫字母開頭的
find . -perm 775 當前目錄下以775許可權的檔案
-print 將查詢到的檔案輸出到標準輸出
-exec command {} \
找到後執行一些shell命令
find . -type f -exec ls -l {} \ 查詢到並且ls
find . -name "*.log" -mtime +5 -ok rm {} \ 查詢5天以前的到並且rm ok命令要求得到確認
xargs 和exec的區別 exec會發起多個程序,而xargs 只有乙個程序減少系統資源的消耗
find . -prem -7 -print|xargs chmod o-w
find . -prem -7 -print|xargs file 檢視檔案型別
grep 標準的,擴充套件的
grep [選項]基礎正規表示式[檔案] 正規表示式最好用「」括起來
-c 只輸出有多少行匹配到了
-i 不區分匹配的大小寫
-h 查詢多檔案時不顯示檔名
-h 顯示檔名
-l 查詢多個檔案時,只顯示包含匹配字元的檔名
-n 顯示匹配行和行資訊
-s 不顯示不存在的或無匹配的錯誤資訊
-v 過濾掉表示式的部分
grep "^[^210]" 1.txt 非210開頭的,2,1,0開頭的行都被過濾掉 3-9開頭的都可以顯示出來
[[:upper:]] [a-z]
[[:alnum:]] [a-z0-9a-z]
[[:lower:]] [a-z]
[[:space:]] 空格或tab鍵
[[:digit:]] [0-9]
[[:alpha:]] [a-za-z]
grep "5[[:digit:]][[:digit:]]" 1.txt 500-599的匹配
awk命名的方式:
awk [-f filed-spearator] 'commend' input-files
awk 指令碼 :所有的命名都放在乙個檔案裡面
awk命令插入乙個單獨的檔案
awk -f awk-script-file input-file
預設的分割符為空格 -f : 以:為分割符 awk -f : '' i.txt print中是要用「」引起來字串的
明白記錄,分割,域。一條記錄被分割就成了域 awk主要進行的操作就是對域進行操作 動作對資料進行處理 放在{}中內指明。一般用print,模式部分決定動作什麼時候被觸發
域:$0 $1...$n
awk 'begin end 1.txt
ip date
$1 $4
end of report
awk 中特殊的字元「+「」?「 前者表示多個字元,後者表示乙個字元 ~ 匹配 !~不匹配
cat i.txt|awk '$0 ~ /218.79.131.96/'
awk '$0 !~ /210.12.12.30/' i.txt
awk '' i.txt
sed 不對原有的檔案操作,先拷貝乙個副本,所有操作在副本上操作
sed命令格式
sed 指令碼 :sed 選項 輸入檔案
選項-n 不列印沒匹配到
-f 如果正在呼叫sed指令碼
sed '2p' i.txt p就是列印
sed -n '2p' i.txt 第2行 不列印沒匹配到的,只列印匹配到的
sed -n '1,2p' i.txt 列印2行
sed -n '/los/p' i.txt 匹配到los
sed -n '2,/los/p' i.txt 從第3行開始到匹配的los結束
sed -n '/^$/=' i.txt 列印出空行的行號
sed -n -e '/^$/p' -e '/^$/=' i.txt 不能同時用-e 區分
sed '/aaaio/a\shenz' i.txt 會在找到aaaio後追加一行寫上shenz 要分兩行進行書寫
sed '/aaaio/i\shenz' i.txt 會在找到aaaio前追加一行寫上shenz
sed '/aaaio/c\shenz ddd' i.txt 會在找到aaaio 替換成shenz ddd
sed '1,2d' i.txt 會把1,2行給刪除掉
sed 's/shenz/shenzhen/g' i.txt 所有shenz的地方全部替換 不加g時只在當次替換
sed 's/shenz/& shenzhen /p' i.txt 匹配到了shenz以後加上shenzhen
sed 's/shenz/ shenzhen &/p' i.txt 匹配到了shenz之前加上shenzhen
Shell文字過濾
元字元 只匹配行首,如 d匹配drwxr x x 只匹配行尾,如trouble 匹配以trouble結尾的所有字元 匹配空行 匹配0個或多個 匹配字元或字串行,中間可以使用 來進行分割,如 1 5 匹配12345,0 9 匹配0到9,a z a za z a za z0 9 等 遮蔽元字元的特殊含義...
shell文字過濾器之grep
grep,sed和awk都是文字處理工具,雖然都是文字處理工具但卻都有各自的優缺點,一種文字處理命令時不能被另乙個完全替換的,否則也不會出現三個文字處理命令了。grep stream editor,文字過濾器,如果僅僅是過濾文字,可使用grep,其效率要比其他的高很多 awk 報告生成器,格式化以後...
shell文字過濾程式(十) cut命令
cut指揮類似至awk,從行內提取的資訊,它是乙個較弱的版本的功能awk。cut命令格式為 cut options filename 當中options有 d 指定與空格和t a b鍵不同的域分隔符。類似於awk的 f f field 指定剪下域數 c list 指定剪下字元數。首先我們來處理按 切...