linux基礎學習第七天-正則表達式及grep

2016-08-04

授課內容:

各種文本工具來查看、分析、統計文本文件(more、less、cat、cut、sort、wc、uniq、head、tail、paste、diff)

grep

正則表達式

擴展正則表達式

【】所有的文本查看、分析、統計等都是只是更改標準輸出的顯示方式,對原文件內容并沒有更改

cat [OPTION]… [FILE]…:文件查看,接受標準輸入

-n:顯示行號

-E:顯示結尾符

-A:顯示所有控制符

more [OPTIONS…] FILE…:分頁查看

[root@Centos7 ~]# more f1 f2 f3
::::::::::::::
f1
::::::::::::::
nihaoma
nizainali
cahifanlema
ddassada
::::::::::::::
f2
::::::::::::::
nihaoma
ni1zainali
cahifanlema
ddass2ada
::::::::::::::
f3
::::::::::::::
dsdasdasda
dsad
adada
asdsa

less FILE…:分頁查看,man幫助調用的就是less命令查看內容

【】 當打開多個文件時,使用如下命令在多個文件之間切換

:n – 瀏覽下一個文件

:p – 瀏覽前一個文件

more和less的區別:

 兩者都是文件查看命令,前者查看只能往后翻頁,并且看完后自動退出,后者可按n/N進行前后頁翻滾查看,同時支持搜索,看完后不會自動退出文件,需要按q退出

head [OPTION]… [FILE]…

-n#:查看文件的前#行內容

tail [OPTION]… [FILE]…

-n#:查看文件的倒數#行內容

-f: 實時跟蹤顯示文件新追加的內容,常用日志監控

cut [OPTION]… [FILE]…

-d:后面跟指定分隔符,默認是tab

-f :后面是指定的列

-c :按字符切割

paste [OPTION]… [FILE]…:合并【多個】文件同行號的列到一行顯示,cat可以合并兩個文件連續行顯示

-d:指定合并后顯示的分隔符

[root@Centos7 ~]# paste f1 f2
nihaomahenhao
nizainalizheli
chifanlemachile
[root@Centos7 ~]# paste -d* f1 f2
nihaoma*henhao
nizainali*zheli
chifanlema*chile
[root@Centos7 ~]# paste -d : f1 f2 f3
nihaoma:nihaoma:dsdasdasda
nizainali:ni1zainali:dsad
cahifanlema:cahifanlema:adada
ddassada:ddass2ada:asdsa

wc [OPTION]… [FILE]…:統計文件信息

-l:統計行數

-c:統計字節總數

-w:統計單詞總數

sort [OPTION]… [FILE]…:對文本信息進行排序顯示

-n:以數字大小進行排序

-r:反向顯示

-t:分隔符(相當于cut的-d選項)

-k:第幾列信息進行整理

uniq [OPTION]… [FILE]…:從輸入中刪除重復的前后相接的行

-c:重復行出現的次數

-d:僅顯示重復的行

常和sort 命令一起配合使用,統計相同行出現的次數:

sort userlist.txt | uniq-c

diff [OPTION]… FILES:比較【兩個】文件的不同之處

[root@Centos7 ~]# cat -n f1 f2
 1nihaoma
 2nizainali
 3cahifanlema
 4ddassada
 5nihaoma
 6ni1zainali
 7cahifanlema
 8ddass2ada
[root@Centos7 ~]# diff f1 f2
2c2
< nizainali
---
> ni1zainali
4c4
< ddassada
---
> ddass2ada
第2,4行有區別(改變)

正則表達式:由一類【特殊字符】及文本【字符】所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能

字符分類:字符匹配、次數匹配、位置錨定、分組

基本正則表達式:

字符匹配:

.:表示任意的【一個字符】

[]:表示匹配中括號內的【任意單個】字符

[^]:表示匹配中括號外的【任意單個】字符

次數匹配:

*:表示【其前字符】的任意次數

.*:表示任意長度的任意字符,相當于通配符的*

\?:表示匹配【其前字符】一次或零次(可有可無)

\+:表示【其前字符】出現至少一次

\{m\}:表示【其前字符】出現m次

\{m,n\}:表示【其前字符】出現至少m次,最多n次

位置錨定:

^:表示其后的字符位于行首

$:表示其前的字符位于行尾

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

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

分組:

\(spring\): 將搜索括號內的整個字符串

\1,\2,\3..:表示引用前面【第1,2,3..括號】搜索到的第一個字符【這是分組的意義所在,就是為了引用前面搜到的字符串,如果不需要引用,和沒括號的結果一樣】

[root@Centos7 ~]# grep -n "\(l..e\)" f1
1:He love his lover.
2:She like her liker.
3:He like his lover.
5:He love his lover and liker.
6:She like her liker and liker.
7:He like his lover and like.
[root@Centos7 ~]# grep -n "l..e" f1
1:He love his lover.
2:She like her liker.
3:He like his lover.
5:He love his lover and liker.
6:She like her liker and liker.
7:He like his lover and like.
[root@Centos7 ~]# grep -n "\(l..e\).*\1" f1
1:He love his lover.
2:She like her liker.
5:He love his lover and liker.
6:She like her liker and liker.
7:He like his lover and like.

擴展正則表達式:

字符匹配(和基本正則表達式一樣):

.

[]

[^]

次數匹配(與基本正則表達式相比少了“\”):

*

?

+

{m}

{m,n}

位置錨定(與基本正則表達式一樣):

^

$

\< \b

\> \b 

分組(與基本正則表達式相比少了“\”)

(spring)

或(基本正則表達式沒有這功能)

C|cat:表示C、cat

(C|c)at :表示Cat、cat

grep [OPTIONS] PATTERN [FILE…]:使用基本正則表達式定義的模式來過濾文本的命令

-i:忽略大小寫搜索

-o:只顯示搜索到的內容

-v:不顯示搜索到的內容 

-n:顯示行號

-E:以擴展正則表達式定義的模式搜索 

-A #:把匹配到的行以及其后#行內容一同顯示

-B #:把匹配到的行以及其前#行內容一同顯示

-C #:把匹配到的行以及其前后#行內容一同顯示

-e:實現多個選項間的邏輯or關系【相當于擴展正則表達式的‘|’】

[root@Centos7 ~]# grep -En "l(ove|ike)" f1
1:He love his lover.
2:She like her liker.
3:He like his lover.
5:He love his lover and liker.
6:She like her liker and liker.
7:He like his lover and like.
[root@Centos7 ~]# grep -e 'like' -e 'love' f1
He love his lover.
She like her liker.
He like his lover.
He love his lover and liker.
She like her liker and liker.
He like his lover and like.

原創文章,作者:麥德良,如若轉載,請注明出處:http://www.www58058.com/30449

(0)
麥德良麥德良
上一篇 2016-08-07
下一篇 2016-08-07

相關推薦

  • 馬哥教育網絡19期+第十三周課程練習

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程)   1)共享名為shared,工作組為magedu;   2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名;   3)添加s…

    Linux干貨 2016-08-12
  • N28第五周

    1、簡述rpm與yum命令的常見選項,并舉例
    2、自建yum倉庫,分別為網絡源和本地源
    3、簡述at和crontab命令,制定 每周三凌晨三、五點10分執行某個腳本,輸出當前時間,時間格式為 2017-12-28 10:00:00
    4、簡述sed常用操作命令,并舉例

    Linux干貨 2018-01-03
  • 來兩道百度的shell開胃菜

    1、寫腳本實現,可以用shell、perl等。在目錄/tmp下找到100個以abc開頭的文件,然后把這些文件的第一行保存到文件new中。 方法1: #!/bin/sh for files in `find /tmp -type f -name "abc*"|h…

    Linux干貨 2016-09-19
  • 磁盤配額管理

    磁盤配額管理    設定文件系統配額 配置邏輯卷設定LVM快照 配置配額系統綜述在內核中執行以文件系統為單位啟用對不同組或用戶的策略不同根據塊或者節點進行限制   執行軟限制(soft linmit)   硬限制(hard limit)初始化分區掛載選項:usrquota, ge…

    Linux干貨 2017-05-22
  • 第六周作業

    第六周作業 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; cp /etc/rc.d/rc.sysinit /tmp vim /tmp/rc.sysinit :進入末行模式 % s/^[[:space:]]/#&…

    Linux干貨 2016-10-09
  • Linux基礎之用戶及組管理

    grep擴展應用,用戶管理,組管理,用戶及組管理命令

    2018-01-31
欧美性久久久久