文件查看和正則表達式

文件查看工具

        cat,tac,rev,more,less,head,tail

cat:查看文本

         cat [OPTION]… [FILE]…

         -E:顯示行結束符$

         -n:對顯示出的每一行進行編號

tac:查看文件

         功能同cat命令,但是cat正序顯示文件,tac反序顯示文件

         tac [OPTION]… [FILE]…

         -E:顯示行結束符$

         -n:對顯示出的每一行進行編號

rev:查看文件

         按正序的行顯示文件,但行中內容按反序顯示

[root@CentOS6 ~]# cat acl3

g:g2:wx

d:g:g2:wx

[root@CentOS6 ~]# tac acl3

d:g:g2:wx

g:g2:wx

[root@CentOS6 ~]# rev acl3

xw:2g:g

xw:2g:g:d

more:分頁查看文件,到末尾自動退出

        more [OPTIONS…] FILE…

less:一頁一頁地查看文件,到末尾時不退出

         查找字符串的命令:

         /PATTERN   搜索文本

         ?PATTERN  搜索文本

                 n:下一個匹配的字符串

                 N:上一個匹配的字符串

         less命令是man命令使用的分頁器(同man的翻頁手法)

head:查看文件的前面幾行,默認查看前10行

         head [OPTION]… [FILE]…

                 -n #:指定獲取前#行

                 -#:指定前#行

[root@CentOS6 ~]# head -3 /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

tail:查看文件的后面幾行,默認查看后10行

         tail [OPTION]… [FILE]…

                 -n #:指定獲取后#行

                 -#:指定獲取后#行

                 -f:跟蹤顯示文件新追加的內容

         eg:tail -n0 -f file  只查看file文本的新加的行

tail-f.png

[root@CentOS6 ~]# tail -3 /etc/passwd

tom4:x:509:509::/home/tom4:/bin/bash

tom5:x:510:510::/home/tom5:/bin/bash

hadoop:x:511:511::/home/hadoop:/bin/bash

文件查看及處理工具

        cut,paste,wc,sort,diff

cut:查看文件并切割文件

         cut [OPTION]… [FILE]…

                 -d DELIMITER: 指明分隔符,默認tab

                 -f FILEDS:

                         #:第#個字段

                         #,#[,#] :離散的多個字段,例如1,3,6

                                  如果是3,1其排序結果也是1,3

                         #-# :連續的多個字段, 例如1-6

                 -c:按字符切割

                 -dB:等同于 -d "  "

                 –output-delimiter=STRING指定輸出分隔符

[root@CentOS6 ~]# tail -3 /etc/passwd | cut -d: -f3,7,1

tom4:509:/bin/bash

tom5:510:/bin/bash

hadoop:511:/bin/bash

paste 合并兩個文件同行號的列到一行

         paste [OPTION]… [FILE]…

                 -d:指定分隔符,默認用TAB

                 -s:所有行合成一行顯示

         paste -d: f1 f2

[root@CentOS6 ~]# cat acl1 acl2

g:g2:rw

d:g:g2:rw

g:g3:r

d:g:g3:r

g:g2:rx

d:g:g2:rx

g:g3:r

d:g:g3:r

[root@CentOS6 ~]# paste -d: acl1 acl2

g:g2:rw:g:g2:rx

d:g:g2:rw:d:g:g2:rx

g:g3:r:g:g3:r

d:g:g3:r:d:g:g3:r

wc:文本數據統計

         # wc acl1

                  4  4  34  acl1

                  行數 字數 字符數 文件名

         -l 只計數行數

         -w 只計數單詞總數

         -c 只計數字節總數

         -m 只計數字符總數

sort:文本排序

         sort [options] file(s)

                 -n 執行按數字大小整理

                 -t char 使用char做分隔符

                 -k # 指定排序時安#行的數據對file進行排序

                 -r 反向排序

                 -f 忽略字符大小寫

                 -u 刪除輸出中的重復行

[root@CentOS6 ~]# sort -t: -k3 -n /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

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

uniq:報告或移除重復的行

         uniq [OPTION]… [FILE]…

                 -c: 顯示每行重復出現的次數(重復行只顯示一次)

                 -d: 僅顯示重復過的行

                 -u: 僅顯示不曾重復的行

                 連續且完全相同的行方為重復

                          常和sort命令一起配合使用,效果更好

                          eg:cut -d: -f7 /etc/passwd | sort | uniq -c

[root@CentOS6 ~]# cut -d: -f7 /etc/passwd |sort |uniq -c

     15 /bin/bash

      1 /bin/sync

      1 /sbin/halt

     29 /sbin/nologin

      1 /sbin/shutdown

練習:1 、找出ifconfig 命令結果中本機的所有IPv4 地址

csu1.png

2 、查出分區空間使用率的最大百分比值

csu2.png

3 、查出用戶UID最大值的用戶名、UID 及shell 類型

csu3.png

4 、查出/tmp的權限,以數字方式顯示

csu4.png

diff:比較文件

         diff命令的輸出被保存在一種叫做“補丁”的文件中

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

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

patch:向文件打補丁

         適用-b選項來自動備份改變了的文件,老文件的新名叫file.orig

         patch /PATH/TO/OLDFILE < /PATH/TO/TATCH_FILE

         -R選項:恢復老文件

[root@CentOS6 testdir]# cp /etc/fstab ./

cp: overwrite `./fstab'? y

[root@CentOS6 testdir]# cp fstab fstab.cg

[root@CentOS6 testdir]# vi fstab.cg

[root@CentOS6 testdir]# diff -u fstab fstab.cg > fstab.patch

[root@CentOS6 testdir]# diff fstab fstab.cg 

5c5

< #

> # hello world

[root@CentOS6 testdir]# patch fstab < fstab.patch 

patching file fstab

[root@CentOS6 testdir]# diff fstab fstab.cg 

Linux上文本處理三劍客

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

                  grep, egrep, fgrep (不支持正則表達式搜索,只支持純文本搜索)

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

         awk :Linux 上的實際為gawk(GNU awk) ,文本報告生成器;

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

         支持正則表達式的程序:grep, vim, less,nginx等

         正則表達式分兩類:

                 基本正則表達式:BRE

                          grep ,egrep -G

                 擴展正則表達式:ERE

                          grep -E, egrep

         正則表達式引擎:

                 采用不同算法,檢查處理正則表達式的軟件模塊

                 PCRE(Perl Compatible Regular Expressions)

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

grep

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

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

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

         grep [OPTIONS] PATTERN [FILE…]

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

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

                 -v: 顯示不能夠被pattern匹配到的行;

                 -i: 忽略字符大小寫

                 -n:顯示匹配的行號

                 -c: 統計匹配的行數,而不顯示匹配到的內容

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

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

                 -A #:after,顯示匹配的行及其后#行

                 -B #: before,顯示匹配的行及其前#行

                 -C #:context,顯示匹配的行及其前后各#行

                 -e:實現多個選項間的邏輯or關系

                          grep –e 'cat' -e 'dog' file

                 -E:使用ERE

                          擴展的正則表達式

         基本正則表達式元字符:

                 字符匹配:

                         . :  匹配任意單個字符;

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

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

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

                 匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數,默認工作在貪婪模式:盡可能長的匹配

                         * :匹配前面的字符任意次,包括0次

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

                         \? :匹配其前面的字符0或1次

                         \+ :匹配其前面的字符至少1次

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

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

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

                                 <=n次

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

                                 >=m次

                 位置錨定:定位出現的位置

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

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

                         ^PATTERN$:  用于模式匹配整行

                                 ^$:  空行

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

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

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

                                 注意:在grep中,字母和數字的組合也被視為單詞

                                 \<PATTERN\>:錨定以PATTERN表達式做為單詞的行

                 分組及引用

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

                                 \(xy\)*ab:xy作為一個整體出現0此或多次

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

                                         \1:模式從左側起,第一個左括號以及與其匹配的右括號之間的內容

                                         \2:模式從左側起,第二個左括號以及與其匹配的右括號之間的內容

                                         \3:

                                         ……

                         后向引用:引用前面的分組括號中的模式所匹配的字符,且引用中的數據和分組模式匹配到的數據是一樣

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

grep1.png

2 、顯示用戶rpc 默認的shell 程序

grep2.png

3 、找出/etc/passwd 中的兩位或三位數

grep3.png

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

grep4.png    

egrep 及擴展的正則表達式

         egrep = grep -E

         egrep [OPTIONS] PATTERN [FILE…]

                  選項:-i,-o,-v,q,-A,-B,-C

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

         擴展正則表達式元字符:

                 字符匹配:

                         .:  匹配任意單個字符;

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

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

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

                 匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數,默認工作在貪婪模式,盡可能長的匹配

                         * :匹配前面的字符任意次,包括0次

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

                         ? :匹配其前面的字符0或1次

                         + :匹配其前面的字符至少1次

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

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

                                 {,n} :匹配前面的字符至多n次

                                 <=n次

                                 {m,} :匹配前面的字符至少m次

                                 >=m次

                         位置錨定:定位出現的位置

                         ^ :行首錨定

                         $ :行尾錨定

                         ^PATTERN$:  用于模式匹配整行

                                 ^$:  空行

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

                         \< 或 \b :詞首錨定

                         \> 或 \b :詞尾錨定

                                 注意:在grep中,字母和數字的組合也被視為單詞

                                 \<PATTERN\>:錨定以PATTERN表達式做為單詞的行

                 分組及引用

                         ():括號內模式會被記錄于正則表達式引擎中:

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

                 或者

                         a|b:a或者b

                         eg:C|cat :表示C或者cat

                         (C|c)at :表示Cat或者cat

練習:1 、顯示當前系統上,root,gao和user1用戶的相關信息

egrep1.png

2 、統計以root 身份登錄的每個遠程主機IP

egrep2.png

3 、使用egrep 取出/etc/rc.d/init.d/functions

egrep3.png

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

(0)
megedugaomegedugao
上一篇 2016-08-07 22:06
下一篇 2016-08-07 22:06

相關推薦

  • 數據庫的備份和恢復

    數據庫的備份和恢復 一 (理論篇)、數據庫備份與恢復基礎 1、數據庫的備份與恢復 備份:存儲的數據副本; 原始數據:持續改變; 恢復:把副本應用到線上系統; 僅能恢復至備份操作時刻的數據狀態; 時間點恢復: binary logs; 2、為什么備份? 災難恢復: 硬件故障(冗余)、軟件故障(bug)、自然災害、黑客攻擊、誤操作、…&nb…

    2016-11-22
  • ?磁盤管理、MBR、GPT、分區工具、文件系統、常見分區掛載

    磁盤管理{磁盤結構;MBR;GPT;分區工具;文件系統;分區掛載;}

    Linux干貨 2016-08-29
  • 軟件管理

    rpm:操作復雜、編譯時間長、極易出現問題、依賴關系復雜、管理方便、 保存依賴關系,需要手工解決。
    yum:自動解決依賴關系、可以對rpm進行分組,基于組進行安裝操作、引入倉庫概念,支持多個倉庫、配置簡單

    2018-03-21
  • N28 第三周【1】:grep和文本處理工具的使用

    grep一些練習 1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who |cut -d” ” -f1 |sort -u root 2、取出最后登錄到當前系統的用戶的相關信息。 [root@localhost ~]# last |cut -d” ” -f1|head -1 |…

    Linux干貨 2017-12-19
  • 劃分子網例題

    概念:子網劃分就是——>將一個大網絡(主機ID位多)劃分成多個小的網絡(主機ID位少) 如何實現呢?!        實現——->網絡ID向主機ID借位,網絡ID位變多,主機ID位變少 涉及的公式:         &n…

    2017-09-04
  • systemd及awk

    1、簡述systemd的新特性及unit常見類型分析,能夠實現編譯安裝的如nginx\apache實現通過systemd來管理
    2、描述awk命令用法及示例(至少3例)
    3、描述awk函數示例(至少3例)

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