第十一章 正規表示式課後習題

2021-10-04 08:34:05 字數 4815 閱讀 2415

1.把/etc/passwd 複製到/root/test.txt,用sed列印所有行。

[root@zl_cloud ~]# cp /etc/passwd /root/test.txt

[root@zl_cloud ~]# sed -n '1,$'p test.txt

[root@zl_cloud ~]#

2.列印test.txt的第3行~第10行。

# sed -n 『3,10』p test.txt

3.列印test.txt中包含root的行。

# sed -n 『/root/』p test.txt

4.刪除test.txt的第15行以及後面的所有行。

# sed 『15,$』d test.txt

5.刪除test.txt中包含bash的行。

# sed 『/bash/』d test.txt

6.將 test.txt 中的 root 替換為 toor。

# sed 『s/root/toor/g』 test.txt

7.將 test.txt 中的 /sbin/nologin 替換為 /bin/login

# sed 『s#sbin/nologin#bin/login#g』 test.txt

8.刪除test.txt第5行~第10行中所有的數字。

# sed 『5,10s/[0-9]*//g』 test.txt

9.刪除test.txt中所有的特殊字元(除了數字以及大小寫字母)。

# sed 『1,$s/[^0-9a-za-z]//g』 test.txt

10.把test.txt中第乙個単詞和最後乙個單詞調換位置。

# sed -r 's/(^[a-za-z]*)([^a-za-z].*[^a-za-z])([a-za-z]*$)/\3\2\1/' test.txt

一開始寫成了這樣,結果是把第乙個字串接到了最後乙個字串後面:

[root@zl_cloud ~]# sed -r 『s/(^[a-za-z]*)(.*)((a-za-z)*$)/\3\2\1/g』 test.txt
然後不行,我就看了下答案,然後:

[root@zl_cloud ~]# sed -r 's/(^[a-za-z]*)(^[a-za-z].*^[a-za-z])([a-za-z]*$)/\3\2\1/' test.txt
反正沒換成功。這裡就關乎到概念的混淆了,這裡講一下^在括號內和在括號外的區別 。

[^字串]:這裡^代表除括號內字串的內容;

^[字串]:這裡^代表以該字串的開始;

^[^字串]:這裡整體就表示除該字串的整體。

11.把test.txt**現的第一組數字(1個或多個)和最後乙個單伺調換位置。

# sed -r 's/(^[^0-9]*)([0-9]*)([^0-9].*[^a-za-z])([a-za-z]+$)/\1\4\3\2/g' test.txt

12.把test.txt中第乙個數字移動到本行末尾。

# sed -r 's/(^[^0-9]*)([0-9]*)([^0-9].*$)/\1\3\2/g' test.txt

13.在test.txt第20行到最後一行最前而加aaa 。

# sed -r '20,$s/^.*$/aaa&/' test.txt

1.用awk列印整個test.txt。 (以下操作都是針對test.txt的,用awk工具實現)

# awk 『』 test.txt

2.查詢所有包含bash的行。

# awk 『/bash/』 test.txt

3.用:作為分隔符,查詢第3個字段等於0的行。

# awk -f 『:』 『$3==」0」』 test.txt

4.用:作為分隔符,查詢第1個字段為root的行,並把該段的root換成toor(可以連同sed一起使用。)

# awk -f 『:』 『$1==」root」』 test.txt |sed 『s/root/toor/g』

5.用:作為分隔符,列印最後乙個字段。

# awk -f 『:』 『』 test.txt

6.列印行數大於20的所有行。

# awk -f 『:』 『nr>20』 test.txt

7.用:作為分隔符,列印所有第3個字段小於第4個字段的行。

# awk -f 『:』 『$3<$4』 test.txt

8.用:作為分隔符,列印第1個字段以及最後乙個字段,並且中間用@連線(例如,第1行應該是這樣的形式:root@/bin/bash )

# awk -f 『:』 『』 test.txt

9.用:作為分隔符,把整個文件的第4個字段相加,求和。

# awk -f 『:』 『; end 』 test.txt

1.如何把/etc/passwd中使用者uid大於500的行列印出來?

# awk -f ':' '$3>」500」' /etc/passwd

2.awk中變數nr和nf分別表示什麼含義?命令awk -f 『:』 '』 /etc/passwd會列印出 什麼結果?

nr:表示行號;

nf:表示用分隔符分隔後一共有多少段。

[root@zl_cloud ~]# awk -f ':' '' /etc/passwd

rootx2

4lp/sbin

/sbin/shutdown

[root@zl_cloud ~]#

[root@zl_cloud ~]#

他也就是列印出了對應段落的對應字串。也就是第一行列印第一行的第乙個字串,第二行列印第二個字串這樣以此類推。不懂的話可以cat test.txt檢視一下。

3.用grep把1.txt文件中包含abc或者123的行過濾出來,並在過濾出來的行前而加上行號。

# grep -e -n 'abc|123' 1.txt

4.命令grep -v 『^$』 1.txt會過濾出哪些行?

會過濾除非空行。

5.符號.、.和分別表示什麼含義?符號+和?表示什麼含義?這5個符號是否可以在grep、egrep、sed以及awk中使用?

6.grep裡面的符號{}用在什麼情況下?

符號,其內部為數字,表示前面的字元要重複的次數。需要強調的是,左右都需要加上轉義字元。另使用時還可以表示乙個範圍,具體格式為,n2還可以為空,這時表示大於等於n1次。

# grep 『o\』 /etc/passwd//這裡意思就是檢視該檔案下出現2個o也就是oo的行。

7.sed有乙個選項可以直接更改文字檔案,是哪個選項?

-i選項。

8.sed -i 's/.* ie//;s/[「|&].*//』 file這條命令表示什麼操作呢?

首先;把該命令分成了兩個部分。第一部分表示把file檔案以ie結尾的字串刪除。第二部分把file檔案以「或者&開頭的字串刪除。

9.如何刪除乙個文件中的所有數字或者字母?

刪除所有數字:# sed -i 『s/[0-9]//g』 filename

刪除所有字母:# sed -i 『s/[a-za-z]//g』 filename

10.擷取日誌1.log的第1個字段(以空格為分隔符),按數字排序,然後去重,但是需要保留重複的數量,如何做?

# awk -f 『 』 『』 1.log | sort -n | uniq -c

11.使用awk過濾出1.log中第7個字段(以空格為分隔符)為200並且第8個字段為11897的行。

# awk -f 『 』 『』 1.log

12.請比較這兩個命令的異同:grep -v 『^[0-9]』 1.txtgrep 『^[^0-9]』 1.txt

# 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//第七段內容改為1,並列印所有的行

①grep -b1;

②grep -a1;

③grep -c1;

15.使用sed與awk結合輸出虛擬機器當前ip位址。 環境就使用你們當前使用的任何乙個虛擬機器環境。

[root@zl_cloud ~]# sed -n '/ipaddr/'p /etc/sysconfig/network-scripts/ifcfg-eno16777736 | awk -f '=' ''

192.168.10.129

[root@zl_cloud ~]#

第十一章課後習題

11 1城市和國家 編寫乙個函式,它接受兩個形參 乙個城市名和乙個國家名。這個函式返回乙個格式為 city,country 的字串,如 santiago,chile。將這個函式儲存在乙個名為 city functions.py 的模組中。建立乙個名為 test cities.py 的程式,對剛編寫的...

《鳥哥linux》 第十一章課後習題答案

1.在linux上可以找到哪些shell?哪個檔案記錄可用的shell?兒linux預設的shell是?1.bin bash,bin tcsh,bin csh 2.etc shells 3.bash,亦即是 bin bash 2.在shell環境下,有個提示符 prompt 他可以修改嗎?要改什麼?...

《Python從入門到實踐》 課後習題第十一章

11 1 城市和國家 編寫乙個函式,它接受兩個形參 乙個城市名和乙個國家名。這個函式返回乙個格式為city,country 的字串,如santiago,chile 將 這個函式儲存在乙個名為city functions.py的模組中。建立乙個名為test cities.py的程式,對剛編寫的函式進行...