正則表達式擴展知識練習
做業題:正則表達式
1. 如何把 /etc/passwd 中用戶uid 大於500 的行給打印出來?
uid是文件passwd的第三段,因此:
awk -F ':' '$3>500 {print $0}' passwd
2. awk中 NR,NF兩個變量表示什麼含義?awk -F ':' '{print $NR}' /etc/passwd 會打印出什麼結果出來?
NR表示行號、NF表示行的段數。 打印結果:依次打印passwd的第n行的第n段。
3. 用grep把1.txt文檔中包含'abc'或者‘123’的行過濾出來,並在過濾出來的行前面加上行號.
grep -n 'abc\|123' 1.txt
4. grep -v '^$' 1.txt 這樣會過濾出哪些行?
^$表明空行,因此-v取反,過濾出全部非空行。
5. '.' '' 和 '.' 分別表示什麼含義? '+'和'?'表示什麼含義,這五個符號是否能夠在grep中使用,是否能夠在egrep、sed以及awk中使用?
.表明匹配單個任意字符 *表明匹配0個或多個任意字符 .*表明匹配空字符或者任意字符串
+表明匹配1個或多個任意字符 ?表明匹配0個或者1個任意字符 。
能夠在grep、egrep、sed、awk中使用
6. grep 裏面用到一個 {} ,它用在什麼狀況下?
表示其前面字符連續出現的次數,花括號裏數字,表明出現的次數。如r{3},表示r連續出現3次。
7. sed有一個選項,能夠直接更改文本文件,是哪一個選項?
-i選擇直接修改原文件。
8. sed -i 's/.ie//;s/["|&].//' file 這條命令表示什麼操做呢?
把file文件中ie字符串及他前面的字符串都刪除,"|&號及他後面的字符串都刪除。並修改原文件
9. 如何刪除一個文檔中的全部數字或者字母?
sed 's/[0-9-a-zA-Z]//g' file ,把數字和字母替換成空字符
10. 截取日誌1.log的第一段(以空格爲分隔符), 按數字排序、而後去重,可是須要保留重複的數量如何作?
awk -F ' ' '{print $1}' 1.log |sort -n |uniq -c
11. 使用awk過濾出1.log中第7段(空格分隔)爲'200' 而且第8段爲'11897'的行。
awk -F ' ' '$7=="200" && $8=="11897" {print $0}' 1.log
12. 請比較這兩個命令的異同: grep -v '^[0-9]' 1.txt 和 grep '^[^0-9]' 1.txt
第一個是:以數字開頭的行匹配出來,輸出打印剩餘的行,包括空行。
第二個是:以非數字開頭的行匹配出來並輸出打印,不包括空行。
13. awk中的$0表示什麼?爲何如下兩條命令的$0結果不一致呢? awk -F ':' '{print $0}' 1.txt 和 awk -F ':' '$7=1 {print $0}' 1.txt
$0表示文檔的行以分隔符隔開後的全部段。
第一條命令:打印文件的全部行的全部段,即輸出打印文件全部內容
第二條命令:匹配行的第7段爲1的行,並輸出打印匹配行的全部段。
14. 使用grep過濾某個關鍵詞時,如何把包含關鍵詞的行連同上面一行打印出來,那下面一行呢?同時上面和下面都打印出來呢?
grep -B1 'keyword' file
grep -A1 'keyword' file
grep -C1 'keyword' file