文件查看和正則表達式

文件查看工具

        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
下一篇 2016-08-07

相關推薦

  • Linux 第三天: (07月26日) Linux使用幫助

    Linux 第三天: (07月26日) Linux使用幫助         whatis 顯示命令的簡短描述makewhatis centos6 制作數據庫mandb centos7 制作數據庫 help COMMAND 內部命令man bash 內部命令COMMAND –help -h 外部命令man C…

    Linux干貨 2016-08-08
  • LVM邏輯卷&RAID管理&磁盤配置詳解

    LVM邏輯卷管理 應用場景:想象一下,你通過傳統的硬盤分區方式為某些用戶提供了一塊磁盤,隨著用戶數據的不斷增加,分區的容量告急。這時要增加容量,只能選擇用另一塊容量更大的硬盤或分區來替換,在這個過程中,你需要將數據先拷貝至新設備,拷貝完成之后,再用新設備替換容量告罄的設備。假設你很有耐心并且整個數據的拷貝過程是順順利利的,你也需要考慮靠背后文件的權限變化、替…

    Linux干貨 2016-09-02
  • shell四劍客之find

    find命令詳解 ### 命令格式 find pathname -options [-print -exec -ok] ### 命令參數 pathname:find命令所查找的目錄路徑。例如用.表示當前目錄,用/來表示系統根目錄 -print:find命令將會匹配的文件輸出到標準輸出。-e…

    Linux干貨 2016-08-22
  • 馬哥教育網絡20期第七周課程練習

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; fdisk /dev/sdb ; mke2fs -t ext4 -b 2048 -L MYDATA -m 2 –O acl /dev/sdb1 (2) 掛載至/data/mydata目錄,要求掛載…

    Linux干貨 2016-08-15
  • linux 生產常用命令

    hostname 顯示當前的主機名pwd 顯示當前工作的目錄wwhowhoami顯示當前用戶及已建立的ssh鏈接useradd 新建一個普通用戶passwd 修改用戶的密碼which 查看系統命令所對應的路徑type 查詢命令是否屬于內部命令或者外部命令hash 哈希 把一個命令一個文本通過某種算法生產一串字符df 查看系統分區hash -l 加快命令查詢執…

    Linux干貨 2017-03-28
  • DNS域名解析系統搭建(BIND)

        【本文導航】    零、準備工作    一、根域服務器配置    二、com頂級域配置    三、linux.com域主服務器配置(DNS1)    四…

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