shell 文字過濾

2021-08-31 22:17:15 字數 3167 閱讀 7845

今天閒著沒事,把以前寫的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 指定剪下字元數。首先我們來處理按 切...