Shell中正則表達(dá)式及sed和awk常見問題
1 正則表達(dá)式中的+、?、*分別表示什么含義?
這三個(gè)字符用來限制關(guān)鍵詞的匹配次數(shù),含義分別如下:
- +:最少匹配一次,比如a+可匹配a、aa、aaa等
- ?:最多匹配一次,比如a?可匹配零個(gè)或一個(gè)a
- *:匹配任意多次,比如a*可匹配零個(gè)或任意多個(gè)連續(xù)的a
2 如何編寫正則表達(dá)式匹配11位的手機(jī)號(hào)?
準(zhǔn)備測(cè)試文件: [root@svr5 ~]# cat tel.txt 01012315 137012345678 13401234567 10086 18966677788 提取包含11位手機(jī)號(hào)的行: [root@svr5 ~]# egrep '^1[0-9]{10}$' tel.txt 13401234567 18966677788
3 簡(jiǎn)述sed定址符的作用及表示方式。
作用:地址符(執(zhí)行指令的條件)控制sed需要處理文本的范圍;不加定址符則逐行處理所有行
表示方式:地址符可以使用行號(hào)或正則表達(dá)式
4 如何使用sed提取文本中的偶數(shù)行?
查看測(cè)試文本:
[root@svr5 ~]# cat -n /etc/rc.local 1 #!/bin/sh 2 # 3 # This script will be executed *after* all the other init scripts. 4 # You can put your own initialization stuff in here if you don't 5 # want to do the full Sys V style init stuff. 6 7 touch /var/lock/subsys/local
提取偶數(shù)行的操作及效果:
[root@svr5 ~]# cat -n /etc/rc.local | sed -n '2~2p' 2 # 4 # You can put your own initialization stuff in here if you don't 6
5 如何使用sed刪除文本中每行的第4個(gè)字符?
查看測(cè)試文本:
[root@svr5 ~]# cat /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local
刪除每行第4個(gè)字符的操作及效果:
[root@svr5 ~]# cat /etc/rc.local | sed 's/.//4' #!/in/sh # # Tis script will be executed *after* all the other init scripts. # Yu can put your own initialization stuff in here if you don't # wnt to do the full Sys V style init stuff. touh /var/lock/subsys/local
6 提取/etc/passwd文件的第6-10行,另存為pass5.txt文件。
提取或?qū)С鑫谋荆?br/>
[root@svr5 ~]# sed -n '6,10p' /etc/passwd > pass5.txt
確認(rèn)提取結(jié)果:
[root@svr5 ~]# cat pass5.txt sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
7 簡(jiǎn)述awk工具的基本語法格式。
格式1: awk [選項(xiàng)] ‘[條件]{處理動(dòng)作}' 文件列表
格式2: 命令 | awk [選項(xiàng)] ‘[條件]{處理動(dòng)作}'
8 簡(jiǎn)述awk工具常用的內(nèi)置變量、各自的作用。
- $n:即$1、$2、$3……,表示指定分隔的第幾個(gè)字段
- $0:保存當(dāng)前讀入的整行文本內(nèi)容
- NF:記錄當(dāng)前處理行的字段個(gè)數(shù)(列數(shù))
- NR:記錄當(dāng)前已讀入行的數(shù)量(行數(shù))
9 awk處理文本時(shí),讀文件前、讀取文件內(nèi)容中、讀文件后后這三個(gè)環(huán)節(jié)是如何表示的?
- BEGIN{ } 文件前處理:awk沒有讀入行之前 要執(zhí)行的動(dòng)作; 一般對(duì)數(shù)據(jù)作初始化操作,可以單獨(dú)使用。
- { } 行處理:對(duì)awk讀入的每一行進(jìn)行處理,可以單獨(dú)使用。
- END{ }文件后處理:awk 把所有的行都處理完后要執(zhí)行的動(dòng)作,一般輸出數(shù)據(jù)處理的結(jié)果??梢詥为?dú)使用。
10 提取當(dāng)前eth0網(wǎng)卡的IPv4地址及掩碼信息。
查看測(cè)試文本:
[root@svr5 ~]# ip add list eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:64:88:8e brd ff:ff:ff:ff:ff:ff inet 192.168.4.55/24 brd 192.168.4.255 scope global eth0 inet 192.168.4.5/24 brd 192.168.4.255 scope global secondary eth0 inet6 fe80::20c:29ff:fe64:888e/64 scope link valid_lft forever preferred_lft forever
提取IPv4地址及掩碼信息的操作及效果:
[root@svr5 ~]# ip add list eth0 | awk '/\<inet\>/{print $2}' 192.168.4.55/24 192.168.4.5/24
11 找出UID位于10~20之間的用戶,輸出用戶名及對(duì)應(yīng)的UID。
[root@svr5 ~]# awk -F: '$3>=10 && $3<=20{print $1":"$3}' /etc/passwd uucp:10 operator:11 games:12 gopher:13 ftp:14
12 利用awk工具統(tǒng)計(jì)使用bash作為解釋器的用戶數(shù)量。
使用NF內(nèi)置變量找最后一列的內(nèi)容,匹配bash即可讓x+1:
[root@svr5 ~]# awk -F/ '$NF=="bash"{x++}END{print x}' /etc/passwd
13 在awk中是否可以使用數(shù)組,分別以什么構(gòu)成?
可以使用數(shù)組,分別以 數(shù)組名、下標(biāo)、值 三個(gè)部分構(gòu)成
14 在linux中對(duì)文本的排序如何實(shí)現(xiàn)?
使用sort命令,比如abc.txt文本
另外還可以使用選項(xiàng)-n按數(shù)字升序排列 -k:針對(duì)指定的列進(jìn)行排序 -r:反向排序
[root@svr5 ~]# sort –n abc.txt
到此這篇關(guān)于Shell中正則表達(dá)式及sed和awk常見問題的文章就介紹到這了,更多相關(guān)Shell正則表達(dá)式及sed和awk內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。