【N25第四周作業】grep

文本處理工具:
	
Linux上文本處理三劍客:
	grep, egrep, fgrep:文本過濾工具(模式:pattern)工具;
		grep:基本正則表達式,-E,-F
		egrep:擴展正則表達式, -G,-F
		grep:不支持正則表達式,
	sed:stream editor, 流編輯器;文本編輯工具;
	awk:Linux上的實現為gawk,文本報告生成器(格式化文本);
		
	正則表達式:Regual Expression, REGEXP
		由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示其字面意義,而是用于表示控制或通配的功能;
			分兩類:
				基本正則表達式:BRE
				擴展正則表達式:ERE
					
		元字符:\(hello[[:space:]]\+\)\+
			
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/

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

 [root@localhost ~]# vim /etc/group
hadoop:x:1200:  
[root@localhost ~]# tail -1 /etc/group  
hadoop:x:1200:

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

hadoop:x:1102:1200::/home/hadoop:/bin/bash  
[root@localhost ~]# tail -1 /etc/passwd  
hadoop:x:history1102:1200::/home/hadoop:/bin/bash

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

[root@localhost home]# chmod 700 /home/hadoop/

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

[root@localhost home]# chown -R hadoop:hadoop /home/hadoop  
[root@localhost home]# ll  
total 0  
drwx------. 2 hadoop    hadoop 59 Dec 14 10:26 hadoop  
drwx------. 2 huangh    huangh 79 Dec  9 06:35 huangh  
drwx------. 2 mageia    mageia 59 Dec 14 09:39 linux  
drwx------. 2      1005 distro 59 Dec 14 09:37 mandriva  
drwx------. 2 openstack clouds 59 Dec 14 09:52 openstack  
drwx------. 2 peguin    peguin 59 Dec 14 09:43 peguin  
drwx------. 2 slackware distro 59 Dec 14 09:43 slackware  
drwx------. 2 tom       tom    59 Dec 14 08:41 tom  
drwx------. 2 root      root   59 Dec 14 10:21 tuser1

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

grep '^[sS]' /proc/meminfo  
grep -i '^s' /proc/meminfo   
grep -E '^s|S' /proc/meminfo

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

[root@localhost ~]# grep '/sbin/nologin' /etc/passwd|cut -d: -f1

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

[root@localhost hadoop]# grep '/bin/bash' /etc/passwd

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

[root@localhost ~]# grep '\<[0-9]\{1,2\}\>' /etc/passwd

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

[root@localhost ~]# grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf

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

[root@localhost ~]# grep '^#[[:space:]]\{1,\}[^[:space:]]\{1,\}' /etc/rc.d/rc.sysinit

12、打出netstat -tan命令執行結果中以‘LISTEN’結尾的行;

[root@localhost ~]# netstat -tan|grep '\<LISTEN\>[[:space:]]*$'

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

[root@localhost ~]# grep '^\([[:alnum:]]\{1,\}\):.*\1$' /etc/passwd
[root@localhost ~]# grep  -E  "^([^:]+\>).*\1$"  /etc/passwd

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

[root@localhost ~]# grep -v '/sbin/nologin$' /etc/passwd

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

[root@localhost ~]# grep '/bin/bash$' /etc/passwd

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

(0)
shengsheng
上一篇 2016-12-18 15:47
下一篇 2016-12-18 16:09

相關推薦

  • vi編輯器

       vim編輯器是眾多文件編輯軟件中比較好的一個,也是使用最多 ,功能最強大的,提供了圖形化界面。    Vi:類unix系統中默認的文本編輯器    Vim:vi編輯器的增強版本,習慣上也稱vi。    作用:創建或修改文本文件,維護linux系統的各種配置文件 vim的使用…

    Linux干貨 2016-08-15
  • LAMP的編譯安裝

    一、編譯安裝amp: (1)系統環境:centos6,7 httpd依賴于apr和apr-util appache protable runtime (2)開發環境: Development Tools,Server Platform Development (3)各程序的版本: httpd:2.2,2.4 php:5.x mysql:5.1,5.5,5.6…

    Linux干貨 2016-10-17
  • 磁盤管理及文件系統

    磁盤管理 本文將從以下幾方面介紹 第一部分:磁盤管理 1、淺識Linux磁盤 2、常見命令 第二部分:文件系統管理 1、文件系統的創建 2、文件系統掛載 3、自動掛載配置文件 第一部分:磁盤管理 淺識Linux磁盤 對于Linux來說我們知道一切皆文件,同樣在Linux中硬件設備在系統上會映射成相對應的文件,我們就像是在Windows看文件一樣只要打開對應的…

    Linux干貨 2017-08-15
  • 第八周作業腳本練習

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態;      在線的主機使用綠色顯示;      不在線的主使用紅色顯示;          &…

    Linux干貨 2017-02-01
  • 磁盤陣列RAID

          RAID全名為Redundant Arrary of lnexpensive Disks,是一種可以提高磁盤IO和提高磁盤耐用性   的磁盤陣列。       RAID的實現方式一般分為三種:             …

    Linux干貨 2016-06-22
  • 第九周加密及DNS

    1、簡述常見加密算法及常見加密算法原理,最好使用圖例解說
    2、搭建apache或者nginx并使用自簽證書實現https訪問,自簽名證書的域名自擬
    3、簡述DNS服務器原理,并搭建主-輔服務器
    4、搭建并實現智能DNS

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