日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 下 grep -c sh* /etc/passwd,Linux文本处理三剑客--grep

發布時間:2024/9/27 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 下 grep -c sh* /etc/passwd,Linux文本处理三剑客--grep 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

稍微接觸過linux都會知道有三個非常強大文本處理工具,那就是grep、sed和awk,想必都有聽說過吧。

Linux文本處理三劍客:

grep, egrep, fgrep:文本過濾工具(模式:pattern);

grep:基本正則表達式,支持-E,-F

egrep:擴展正則表達式, 支持-G,-F

fgrep:不支持正則表達式,

sed:stream editor, 流編輯器;文本編輯工具;

awk:Linux上的實現為gawk,文本報告生成器(格式化文本);

以上三款工具都支持正則表達式

正則表達式:Regual Expression, REGEXP

由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示其字面意義,而是用于表示控制或通配的功能;

分兩類:

基本正則表達式:BRE

擴展正則表達式:ERE

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

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

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

格式:

grep ?[OPTIONS] ?PATTERN ?[FILE...]

grep ?[OPTIONS] ?[-e PATTERN | -f FILE] ?[FILE...]

選項(OPTIONS):

--color=auto:對匹配到的文本著色后高亮顯示;(在centos7中管理員alias中已定義,centos6中沒有定義)

[root@test7_1 ~]# alias

alias grep='grep --color=auto'

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

[root@centos7 ~]# grep -i "uuid" /etc/fstab

UUID=48604746-41c1-41df-aaf1-f3588bfd3edc ?/ ?xfs ?defaults ?0 0

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

[root@centos7 ~]# grep -o "UUID" /etc/fstab

UUID

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

[root@test7_1 ~]# grep -v "UUID" /etc/fstab

-n:顯示模式匹配到內容的行號

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

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

-A #:after, 后#行

[root@test7_1 ~]# grep -A 1 "root" /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

-B #:before,前#行

[root@test7_1 ~]# grep -B 1 "^bin" /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

-C #:context,前后各#行

[root@test7_1 ~]# grep -C 1 "^bin" /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

基本正則表達式元字符:

字符匹配:

. :匹配任意單個字符;

[root@centos7 sh]# grep "[[:punct:]]." issue

\S

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

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

[[:upper:]]:所有大寫字母

[[:lower:]]:所有小寫字母

[[:alpha:]]:所有字母

[[:digit:]]:所有數字

[[: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(root)來匹配整行;

^$:空白行;

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

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

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

\:匹配完整單詞;

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

分組及引用:

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

例:\(xy\)*ab

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

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

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

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

...

示例:

He loves his lover.

He likes his lover.

She likes her liker.

She loves her liker.

[root@test7_1 ~]#?grep ?"\(l..e\).*\1" ?lovers.txt

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

上述講的是grep命令使用及基本正則表達式使用方法,grep是支持正則表達式,可以在工作中結合使用。先來幾道練習題:

1、顯示/etc/passwd文件中不以/bin/bash結尾的行;

2、找出/etc/passwd文件中的兩位數或三位數;

3、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一個空白字符開頭,且后面非空白字符的行;

4、找出"netstat -tan"命令的結果中以'LISTEN'后跟0、1或多個空白字符結尾的行;

解答:

1、[root@test7_1 ~]# grep -v "/bin/bash$" /etc/passwd

2、[root@test7_1 ~]# grep "\" /etc/passwd

3、[root@test7_1 ~]# grep ?"^[[:space:]]\+[^[:space:]]" ?/etc/grub2.cfg

4、[root@test7_1 ~]# netstat -tan | grep ?"LISTEN[[:space:]]*$"

===========================================================================================

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:詞尾錨定;

分組及引用:

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

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

或:

a|b:a或者b;

C|cat:C或cat

(c|C)at:cat或Cat

練習:

1、找出/proc/meminfo文件中,所有以大寫或小寫S開頭的行;至少有三種實現方式;

2、顯示當前系統上root、centos或user1用戶的相關信息;

3、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一個小括號的行

4、使用echo命令輸出一絕對路徑,使用egrep取出基名;

/var/log/messages取出其路徑名;類似于對其執行dirname命令的結果;

5、找出ifconfig命令結果中的1-255之間的數值;

6、找出ifconfig命令結果中的IP地址;

7、添加用戶bash, testbash, basher以及nologin(其shell為/sbin/nologin);而后找出/etc/passwd文件中用戶名同shell名的行;

解:

1、

[root@centos7 sh]# grep -i '^s' /proc/meminfo

[root@centos7 sh]# grep '^[sS]' /proc/meminfo

[root@centos7 sh]# egrep '^(s|S)' /proc/meminfo

2、首先需要創建用戶

[root@centos7 sh]# grep -E "^(root|centos|user1)\>" /etc/passwd

3、[root@centos7 sh]# grep -E -o "[_[:alnum:]]+\(\)" ?/etc/rc.d/init.d/functions

4、[root@centos7 sh]# echo /etc/sysconfig/ | grep -E -o "[^/]+/?$"

[root@centos7 sh]# echo /var/log/messages | grep -E -o "^[/]?.*/"

5、[root@centos7 sh]# ifconfig | grep -E -o "\"

6、

7、[root@centos7 sh]# grep -E "^([^:]+\>).*\1$" /etc/passwd

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

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

文本查看及處理工具:wc, cut, sort, uniq, diff, patch

wc:word count(統計文本字數)

格式:

wc ?[OPTION]... ?[FILE]...

選項:

-l: lines(行數)

-w:words(單詞:所有連續的字母都叫單詞)

-c: bytes(字節數:大小)

示例:

[root@test7_1 ~]# wc anaconda-ks.cfg

43 ?101 1143 anaconda-ks.cfg

解:43行、101單詞、1143字符大小

cut:分隔截取指定內容

格式:

cut OPTION... [FILE]...

選項:

-b:以字節為單位進行分割。這些字節位置將忽略多字節字符邊界,除非也指定了 -n 標志

-n :取消分割多字節字符。僅和 -b 標志一起使用。如果字符的最后一個字節落在由 -b 標志的 List 參數指示的
范圍之內,該字符將被寫出;否則,該字符將被排除

-d CHAR:以指定的字符為分隔符;

-f FIELDS:挑選出的字段;

#:指定的單個字段;

#-#:連續的多個字段;

#,#:離散的多個字段;

#-:指定單個字段到最后

示例:

[root@test7_1 sh]# cat issue | cut -b 2-6

[root@test7_1 sh]# cat /etc/passwd | cut -d: -f2

sort:排序

格式:

sort ?[OPTION]... ?[FILE]...

選項:

-n:基于數值大小而非字符進行排序;

-t CHAR:指定分隔符;

-k #:用于排序比較的字段;

-r:逆序排序;

-f:忽略字符大小寫

-u:重復的行只保留一份;

重復行:連續且相同;

示例:

[root@centos7 sh]# sort -t : -k 3 -n ?/etc/passwd

[root@centos7 sh]# sort -t : -k 3 -n -r /etc/passwd

uniq:報告或移除重復的行

格式:

uniq [OPTION]... [INPUT [OUTPUT]]

選項:

-c:顯示每行的重復次數;

-u:僅顯示未曾重復過的行;

-d:僅顯示重復過的的行;

diff:compare files line by line(文件逐行對比)

格式:

diff [OPTION]... FILES

diff ?/PATH/TO/OLDFILE ?/PATH/TO/NEWFILE > /PATH/TO/PATCH_FILE

選項:

-u:使用unfied機制,即顯示要修改的行的上下文,默認為3行;

示例:

[root@centos7 sh]# diff issue.bak issue >> buding_issue.patch

patch:向文件打補丁

格式:

patch [OPTIONS] -i /PATH/TO/PATCH_FILE /PATH/TO/OLDFILE

[root@centos7 sh]# patch -i buding_issue.patch issue

patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE

[root@centos7 sh]# patch ./issue < ./buding_issue.patch

注:diff和patch結合使用,首先對比兩個文件中的差異,生成一個補丁文件。在用補丁文件進行指定文件打補丁

總結

以上是生活随笔為你收集整理的linux 下 grep -c sh* /etc/passwd,Linux文本处理三剑客--grep的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。