第四周作業(正則表達式)

grep: Global search REgular expression and Print out the line.

        作用:文本搜索工具,根據用戶指定的“模式(過濾條件)”對目標文本逐行進行匹配檢查;打印匹配到的行;

        模式:由正則表達式的元字符及文本字符所編寫出的過濾條件;

    正則表達式引擎;

        grep  [OPTIONS]  PATTERN  [FILE…]

        grep  [OPTIONS]  [-e PATTERN | -f FILE]  [FILE…]

            OPTIONS:

                –color=auto:對匹配到的文本著色后高亮顯示;

                -i:ignorecase,忽略字符的大小寫;

                -o:僅顯示匹配到的字符串本身;

                -v, –invert-match:反向匹配,顯示不能被模式匹配到的行;

                -E:支持使用擴展的正則表達式元字符;

                -q, –quiet, –silent:靜默模式,即不輸出任何信息;

                -A #:after, 后#行

                -B #:before,前#行

                -C #:context,前后各#行

    基本正則表達式元字符:

        字符匹配:

                . :匹配任意單個字符;

                []:匹配指定范圍內的任意單個字符;

                [^]:匹配指定范圍外的任意單個字符;

                [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

        匹配次數:用在要指定其出現的次數的字符的后面,用于限制其前面字符出現的次數;默認工作于貪婪模式;

                *:匹配其前面的字符任意次;0,1,多次;

                    例如:grep "x\+y"

                        abxy

                        aby

                        xxxxxy

                        yab

                .*:匹配任意長度的任意字符

                \?:匹配其前面的字符0次或1次;即其前面的字符是可有可無的;

                \+:匹配其前面的字符1次或多次;即其面的字符要出現至少1次;

                \{m\}:匹配其前面的字符m次;

                \{m,n\}:匹配其前面的字符至少m次,至多n次;

                \{0,n\}:至多n次

                \{m,\}:至少m次

        位置錨定:

                ^:行首錨定;用于模式的最左側;

                $:行尾錨定;用于模式的最右側;

                ^PATTERN$:用于PATTERN來匹配整行;

                ^$:空白行;

                ^[[:space:]]*$:空行或包含空白字符的行;

        單詞:非特殊字符組成的連續字符(字符串)都稱為單詞;

                \< 或 \b:詞首錨定,用于單詞模式的左側;

                \> 或 \b:詞尾錨定,用于單詞模式的右側;

                \<PATTERN\>:匹配完整單詞;

        分組及引用

                \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理;

                \(xy\)*ab

        Note:分組括號中的模式匹配 到的內容會被正則表達式引擎自動記錄于內部的變量中,這些變量為:

            \1:模式從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字符;

            \2:模式從左側起,第二個左括號以及與之匹配的右括號之間的模式所匹配到的字符;

            \3

            …

                He loves his lover.

                He likes his lover.

                She likes her liker.

                She loves her liker.

            ~]# grep  "\(l..e\).*\1"  lovers.txt

        后向引用:引用前面的分組括號中的模式所匹配到的字符;

egrep:支持擴展的正則表達式實現類似于grep文本過濾功能;grep -E

        egrep [OPTIONS] PATTERN [FILE…]

            選項:

                -i, -o, -v, -q, -A, -B, -C

                -G:支持基本正則表達式

        擴展正則表達式的元字符:

            字符匹配:

                .:任意單個字符

                []:指定范圍內的任意單個字符

                [^]:指定范圍外的任意單個字符

        次數匹配:

                *:任意次,0,1或多次;

                ?:0次或1次,其前的字符是可有可無的;

                +:其前字符至少1次;

                {m}:其前的字符m次;

                {m,n}:至少m次,至多n次; 

                {0,n}

                {m,}

        位置錨定:

                ^:行首錨定;

                $:行尾錨定;

                \<, \b:詞首錨定;

                \>, \b:詞尾錨定;

        分組及引用:

            ():分組;括號內的模式匹配到的字符會被記錄于正則表達式引擎的內部變量中;

                后向引用:\1, \2, …

        或:

                a|b:a或者b;

                C|cat:C或cat

                (c|C)at:cat或Cat

fgrep:不支持正則表達式元字符;

        當無需要用到元字符去編寫模式時,使用fgrep必能更好;

1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。

[root@localhost ~]# cp -r /etc/skel /home/tuser1
[root@localhost ~]# chmod 700 /home/tuser1
[root@localhost ~]# ll -a /home/tuser1
total 16
drwx------   3 root root   74 Dec 28 19:21 .
drwxr-xr-x. 11 root root 4096 Dec 28 19:21 ..        #此為/home/tuser1的上一級目錄
-rw-------   1 root root   18 Dec 28 19:21 .bash_logout
-rw-------   1 root root  193 Dec 28 19:21 .bash_profile
-rw-------   1 root root  231 Dec 28 19:21 .bashrcd
rwx------   4 root root   37 Dec 28 19:21 .mozilla

2、編輯/etc/group文件,添加組hadoop。

[root@localhost ~]# vim /etc/group 
peguin:x:2015:openstack
admins:x:2017:slackware
clouds:x:2018:nova:x:2019:openstack
mysql:x:983:
hadoop:x:2020:            編輯添加:G-->o在尾行添加

3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id號;其家目錄為/home/hadoop。

[root@localhost ~]# vim /etc/passwd
slackware:x:2002:2016::/home/slackware:/bin/tcsh
openstack:x:3003:2018::/home/openstack:/bin/bash
mysql:x:988:983::/home/mysql:/sbin/nologin
hadoop:x:2020:2020::/home/hadoop:sbin/bash            #新添加用戶

4、復制/etc/skel目錄為/home/hadoop,要求修改hadoop目錄的屬組和其它用戶沒有任何訪問權限。

[root@localhost ~]# cp -r /etc/skel /home/hadoop
[root@localhost ~]# chmod 700 /home/hadoop
[root@localhost ~]# ll -a /home/hadoop
total 16
drwx------   3 root root   74 Dec 28 19:44 .
drwxr-xr-x. 12 root root 4096 Dec 28 19:44 ..
-rw-r--r--   1 root root   18 Dec 28 19:44 .bash_logout
-rw-r--r--   1 root root  193 Dec 28 19:44 .bash_profile
-rw-r--r--   1 root root  231 Dec 28 19:44 .bashrc
drwxr-xr-x   4 root root   37 Dec 28 19:44 .mozilla

5、修改/home/hadoop目錄及其內部所有文件的屬主為hadoop,屬組為hadoop。

[root@localhost ~]# chown -R hadoop:hadoop /home/hadoop
[root@localhost ~]# ll -a /home/hadoop
total 16
drwx------   3 hadoop hadoop   74 Dec 28 19:44 .
drwxr-xr-x. 12 root   root   4096 Dec 28 19:44 ..
-rw-r--r--   1 hadoop hadoop   18 Dec 28 19:44 .bash_logout
-rw-r--r--   1 hadoop hadoop  193 Dec 28 19:44 .bash_profile
-rw-r--r--   1 hadoop hadoop  231 Dec 28 19:44 .bashrc
drwxr-xr-x   4 hadoop hadoop   37 Dec 28 19:44 .mozilla

6、顯示/proc/meminfo文件中以大寫或小寫S開頭的行;用兩種方式;

[root@localhost ~]# grep -i "^s" /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              7144 kB
Slab:              87316 kB
SReclaimable:      51960 kB
SUnreclaim:        35356 kB
[root@localhost ~]# grep "^[sS]" /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              7144 kB
Slab:              87308 kB
SReclaimable:      51960 kB
SUnreclaim:        35348 kB
[root@localhost ~]# grep "^\(s\|S\)" /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              7144 kB
Slab:              87332 kB
SReclaimable:      51960 kB
SUnreclaim:        35372 kB

7、顯示/etc/passwd文件中其默認shell為非/sbin/nologin的用戶;

[root@localhost ~]# grep -v "/sbin/nologin$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
Xfei:x:1000:1000:fei:/home/Xfei:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1003::/home/user3:/bin/bash
mageia:x:1100:1100::/home/linux:/bin/bash
slackware:x:2002:2016::/home/slackware:/bin/tcsh
openstack:x:3003:2018::/home/openstack:/bin/bash
hadoop:x:2020:2020::/home/hadoop:sbin/bash
[root@localhost ~]# grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1
root
sync
shutdown
halt
Xfei
user1
user2
user3
mageia
slackware
openstack
hadoop

8、顯示/etc/passwd文件中其默認shell為/bin/bash的用戶;

[root@localhost ~]# grep "/bin/bash" /etc/passwd | cut -d: -f1
root
Xfei
user1
user2
user3
mageia
openstack

9、找出/etc/passwd文件中的一位數或兩位數;

[root@localhost ~]# grep -E "\<[0-9]{1,2}\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
...

10、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;

[root@localhost ~]# grep -E "^[[:space:]]+" /boot/grub/grub.conf
grep: /boot/grub/grub.conf: No such file or directory     #好尷尬,沒有此文件

11、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;

[root@localhost ~]# grep -E "^#[[:space:]]+[^[:space:]]" /etc/rc.d/rc.sysinit 
grep: /etc/rc.d/rc.sysinit: No such file or directory    #依然沒有此文件

12、打出netstat -tan命令執行結果中以‘LISTEN’,后或跟空白字符結尾的行;

[root@localhost ~]# netstat -tan | grep  "LISTEN[[:space:]]*$"
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN

13、添加用戶bash, testbash, basher, nologin (此一個用戶的shell為/sbin/nologin),而后找出當前系統上其用戶名和默認shell相同的用戶的信息;

[root@localhost ~]# useradd bash
[root@localhost ~]# useradd testbash
[root@localhost ~]# useradd basher
[root@localhost ~]# useradd -s /sbin/nologin nologin
[root@localhost ~]# grep -E -o "^([^:]+\>).*\1$" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
bash:x:3004:3004::/home/bash:/bin/bash
nologin:x:3007:3007::/home/nologin:/sbin/nologin

原創文章,作者:小飝,如若轉載,請注明出處:http://www.www58058.com/65166

(0)
小飝小飝
上一篇 2016-12-28 18:09
下一篇 2016-12-28 21:39

相關推薦

  • 第六周作業

    一、Vim編輯器練習: 用Vim編輯器做下面的練習,我的Linux系統(CentOS 6.9)安裝了精簡版系統,沒有Vim編輯器。 a、設置Yum源為網易開源鏡像站。 b、選擇對應“鏡像名”,到對應的“CentOS使用說明”里面查看內容 c、看著CentOS說明操作就可以了 d、使用說明 首先備份/etc/yum.repos.d/CentOS-Base.re…

    Linux干貨 2017-08-22
  • 邏輯卷管理(LVM)

    邏輯卷管理(LVM) LVM概念 是系統上對磁盤分區進行管理的一種機制,是建立在硬盤和分區之上的一個邏輯層,用來提高磁盤分區管理的靈活性。 安裝Linux系統時,最常見的問題是如何評估各分區大小,以分配合適的硬盤空間。隨著LVM的出現,這些問題都引刃而解了,用戶在無需停機的情況下方便地情況下方便的調整個分區的大小。 LVM重點在于可以彈性的調整文件系統的容量…

    Linux干貨 2016-11-22
  • /etc/fstab及/boot分區文件恢復

    以centos6為例,/boot目錄下有最為關鍵的開機啟動所必須的內核文件、根文件系統驅動文件已經引導加載程序(bootloader)grub。當我們清空此文件夾之后關機,機器就不能正常啟動了,這種情況下,可以借助光盤啟動進入救援模式解決。具體步驟如下: 1. 開機進入救援模式 這里不像正常情況下,顯示根文件系統掛載在/mnt/sysimage目錄,而是提示…

    2017-07-09
  • DNS高級應用

        DNS高級應用     1、主從復制      應用場景: (1)、當主DNS服務器壓力過大,無法正常處理過多的DNS解析請求時,從DNS服務器可以起到負載均衡的作用。 (2)、當主DNS服務器出現故障時,從DNS服務器可以為其提供冗余備份功能。     實驗環…

    Linux干貨 2015-06-18
  • 正則表達式之一grep

    grep :文本過濾( 模式:pattern) 工具 包括:grep, egrep, fgrep (不 支持正則表達式 搜索) 用法格式: grep [OPTIONS] PATTERN [FILE…]            &n…

    2017-02-27
  • Buffer和Cache的區別

    1、buffer(緩沖) 是為了提高內存和硬盤(或其他I/O設備)之間的數據交換的速度而設計的。 2、cache(緩存) 從CPU角度考慮,是為了提高cpu和內存之間的數據交換速度而設計的,例如平常見到的一級緩存、二級緩存、三級緩存。 cpu在執行程序所用的指令和讀數據都是針對內存的,也就是從內存中取得的。由于內存讀寫速度慢,為了提高cpu和內存之間數據交換…

    Linux干貨 2018-01-02
欧美性久久久久