【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
下一篇 2016-12-18

相關推薦

  • Linux網絡管理&腳本編程之執行流程、循環

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋(Bridge):是早期的兩端口二層網絡設備,用來連接不同網段。網橋的兩個端口分別有一條獨立的交換信道,不是共享一條背板總線,可隔離沖突域。網橋比集線器(Hub)性能更好,集線器上各端口都是共享同一條背板總線的。后來,網橋被具有更多端口、同時也可隔離沖突域的交換機(Switc…

    Linux干貨 2016-11-14
  • 磁盤配額、陣列與邏輯卷

    一、磁盤配額 在內核中執行以文件系統為單位啟用對不同組或者用戶的策略不同 根據塊或者節點進行限制執行軟限制(soft limit)硬限制(hard limit) 步驟一:獲得文件系統支持臨時有效:mount -o remount,usrquota,grpquota {mount_point|device}永久有效:寫入配置文件 /etc/fstab 中檢查文…

    Linux干貨 2016-08-29
  • Linux文本處理工具grep

    文件查看工具:cat     將[文件]或標準輸入組合輸出到標準輸出。               -A, –show-all       &nbs…

    Linux干貨 2016-08-10
  • Redis基于keepalived的高可用實踐

    接著上一章節來: Redis基于keepalived的高可用實現 方案拓撲圖 測試方案 1.       手動關閉AppM keepalived進程確認keepalived主從變化,AppS1是否變更為主 2.       開啟keepal…

    2015-03-05
  • shell腳本編寫-1練習題

    1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小 #!/bin/bash echo “the hostname is:`hostname`” echo “the ip address is:`ifconfig | sed –n ‘2p’ |sed…

    Linux干貨 2016-08-15
  • 系統基礎之Btrfs文件系統詳解

    btrfs文件系統:技術預覽版(centos7) 描述: Btrfs(B-tree,Butter FS,Better fs),GPL授權,Orale,2007 寫實復制特性(Cow)     cp –reflink (只能在btrfs文件系統中使用) 想取代ext系統系統, 支…

    Linux干貨 2016-09-21
欧美性久久久久