grep,sed,awk與簡單正則表達式應用
阿新 • • 發佈:2018-04-01
Linux學習grep,sed,awk與簡單正則表達式應用
-C 後跟一個數字 ps -C2 表示打印符合要求的行及上下各兩行
-r 會把目錄下面的所有文件全部遍歷
這裏使用的測試文件是linux /etc/passwd文件,最好是復制一份進行練習,方式對文件內容造成損壞。感覺還是要多練習才能很好的使用,習題這裏就不貼了,網上一找一大把。
grep:
-o 用作計算出現多少次字段
-c 打印符合要求的行數
-n 在輸出符合要求的行的同時也打印行號
-v 打印不符合要求的行
-A 後跟一個數字 ps -A2表示打印符合要求的行及下面兩行
-B 後跟一個數字 ps -B2表示打印符合要求的行及上面兩行
-r 會把目錄下面的所有文件全部遍歷
過濾出帶有某個關鍵字的行並且輸出行號 grep -n ‘root‘ passwd 過濾出不帶有某個關鍵字的行並且輸出行號 grep -n -v ‘root‘ passwd 過濾出所有包含數字的行並且輸出行號 grep -n ‘[0-9]‘ passwd 過濾出所有不帶有數字的行 grep -n -v ‘[0-9]‘ passwd 去除所有以#號開頭的行:grep -n -v ‘^#‘ passwd 去除所有以#號和空行:grep -v ‘^#‘|grep -v ‘^$‘ 過濾出以非數字開頭的行 grep ‘^[^0-9]‘ 1.txt 過濾出所有以英文字母開頭的行 grep ‘[a-zA-Z]‘ passwd 過濾任意一個或多個字符 grep ‘r.o‘ passwd;grep ‘r*t‘ passwd; grep ‘r.*t‘ passwd ^一般表示開頭,但是當在[^]時候會表示排除字符) [^a]表示“匹配除了a的任意字符”。 [^a-zA-Z0-9]表示“找到一個非字母也非數字的字符”。 [\^abc]表示“找到一個插入符或者a或者b或者c”。 [^\^]表示“找到除了插入符外的任意字符。 * 0個或多個*前面的字符 . 任意一個字符(包括多個字符) ? 表示0個或一個?前面的字符 + 表示一個或多個+前面的字符 .*表示任意字符不限制數量
註意:
+ ? | grep不支持(要使用-E選項),egrep才支持
(oo)* 0個或多個oo
(oo){1,2} 表示大於1次或2次
sed:(-n和p組合,其他不用)
打印指定行sed ‘10p‘ -n passwd; sed ‘1,4p‘ -n passwd; sed ‘5,$p‘ -n 1.txt 打印包含某個字符串的行 sed -n ‘/root/p‘ passwd 可以使用^ . * $ -e 可以實現同時進行多個任務 sed -e ‘/root/p‘ -e ‘/body/p‘ -n passwd 也可以用;隔開 實現 sed ‘/root/p‘; /body/p‘ -n passwd 刪除行 sed ‘/root/d’ passwd; sed ‘1d‘ passwd; sed ‘1,10d‘ passwd 替換 sed ‘1,2s/ot/to/g‘ passwd 其中s是替換的意思,g是全局替換,否則只是替換一次,/也可以為#,@等 刪除所有的數字 sed ‘s/[0-9]//g‘ passwd 刪除所有的非數字 sed ‘/[^0-9]//g‘ passwd 調換2個字符串的位置 head -n2 passwd | sed ‘s/\(root\)\(.*\)\(bash\)/\3\2\1/‘ 直接修改文件內容 sed -i ‘s/ot/to/g‘ passwd sed ‘s/[a-z]/\u&/g‘ passwd將小寫字母全局轉換為大寫字母 sed ‘s/[A-Z]/\l&g‘ passwd 將大寫字母全部轉換為小寫字母
awk:
截取文檔中的某段 awk -F ‘:‘ ‘{print $1}‘ passwd
也可以使用自定義字符串連接每個段 awk -F ‘:‘ ‘{print $1"#"$2"#"$3"#"$4}‘ passwd
匹配字符或者字符串 awk ‘/oo/‘ passwd
針對某個段匹配 awk -F ‘:‘ ‘$1~/oo/‘ passwd
多次匹配 awk -F ‘:‘ ‘/root/ {print $1,$3};$1 ~/test/;$3 ~/20/‘ passwd
條件操作符: == > < != >= <=
awk -F ‘:‘ ‘$3==0‘ passwd
awk -F ‘:‘ ‘$3>500‘ passwd
awk -F ‘:‘ ‘$7!="/sbin/nologin"‘ passwd
awk -F ‘:‘ ‘$3<$4‘ passwd
awk -F ‘:‘ ‘$3>$5 && $3<$7‘ passwd
awk -F ‘:‘ ‘$3>$4 || $7="/bin/bash"‘ passwd
awk內置變量 NF(段數) NR(行數)
head -n3 1.txt | awk -F ‘:‘ ‘{print NF}‘
head -n3 1.txt | awk -F ‘:‘ ‘{print $NF}‘ 顯示最後一段
head -n3 1.txt | awk -F ‘:‘ ‘{print NR}‘ 顯示行數
打印20行之後的行 awk ‘NR>20‘ passwd
awk -F ‘:‘ ‘NR>20 && $1~/ssh/‘ passwd
更改某個字段的值awk -F ‘:‘ ‘$1="root"‘ passwd
數學計算,把第三段和第四段的值相加,並且賦予第七段
awk -F ‘:‘ ‘{$7=$3+$4;print $0}‘ passwd
計算第三段的總和 awk -F ‘:‘ ‘{(tot=tot+$3)}; END {print tot}‘ passwd
awk中也可以使用if關鍵詞 awk -F ‘:‘ ‘{if($1=="root")print $0}‘ passwd
grep,sed,awk與簡單正則表達式應用