Linux 文 本 處 理 工 具

Linux 文 本 處 理 工 具

一.學習大綱:

各種文本工具來查看、分析、統計文本文件

文件內容查看工具:cat, tac,revmore,less

文件截取:headtail

按列抽?。?span style="font-family:Arial">cutpaste

分析文本的工具:wc , sort , uniq,diffpatch

命令使用練習題

◎文本過濾與處理工具:

grep與正則表達式

grep命令使用練習題

egrep與擴展正則表達式

erep命令使用練習題

Sed文件處理工具 

為什么要學習文件處理工具?

我們從以上幾個方面來學習和認識在Linux中文本處理的工具,在linux中絕大多數的文件為文本工具,例如:centos中 單一的文本編輯工具nano,可以打開 /etc下有許多文件配置文件,還可以打開/var/log中的大多數的日志文件等等。

在我們日常linux維護工作中,我們會更許許多多的文本工具打交到,那我們日常對于日志文件的分析統計工作,對于配置文件的排查問題等等問題需要我們靈活的使用文本處理工具。

由淺入深的學習各個文件工具的使用

我們由淺入深的一一了解各個文本處理工具的功效與用法,后面我們在配和實例來詳細的了解各個工具的靈活使用。

§·文件內容查看工具:cat, tac,rev,moreless

cat,tacrev命令:查看文件內容

功能:查看文件內容

語法:cat  tac  rev  [FILE] ,屏幕上直接顯示文件的內容。

參數:cat命令為例講解

-E: 顯示行結束符$

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

-A:顯示所有控制符

-b:非空行編號

-s:壓縮連續的空行成一行 

more: 分頁查看文件

功能:分頁查看文件內容,對于大文件

語法:more [OPTIONS…] FILE…

參數:

      -d: 顯示翻頁及退出提示 

less命令是man命令使用的分頁器

功能:less:一頁一頁地查看文件或STDIN輸出

語法:less   FILE…

參數:

/文本搜索文本

n/N跳到下一個or 上一個匹配

less命令是man命令使用的分頁器

§·文件截取:headtail

head命令:顯示文件頭前面指定多少行

語法:head [OPTION]… [FILE]…

參數:

-c #: 指定獲取前#字節

-n #: 指定獲取前#

-#:指定行數 

tail命令:顯示文件尾后面指定多少行

語法:tail [OPTION]… [FILE]…

參數:

-c #: 指定獲取后#字節

-n #: 指定獲取后#

-#

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

§·按列抽取文本cut和合并文件paste

Cut:抽取文件工具

語法:cut [OPTION]… [FILE]…

參數:

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

-f FILEDS:

#: #個字段

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

#-#:連續的多個字段, 例如1-6 混合使用:1-3,7

-c :按字符切割

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

Paste命令:合并兩個文件同行號的列到一行

語法:paste [OPTION]… [FILE]…

參數:

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

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

例:paste f1 f2

  paste -s f1 f2 

§·分析文本的工具:wc , sort , uniq,diffpatch

Wc:文本數據統計工具

功能:

計數單詞總數、行總數、字節總數和字符總數

可以對文件或STDIN中的數據運行

語法:wc  [OPTION]… [FILE]…

參數:v

-l : 來只計數行數

-w : 來只計數單詞總數

-c : 來只計數字節總數

-m : 來只計數字符總數

Sort:整理文本,按特定要求排序

功能:把整理過的文本顯示在STDOUT,不改變原始文件

語法:sort  [OPTION]…  [FILE]…

參數:

ü-r : 執行反方向(由上至下)整理

ü-n : 執行按數字大小整理

ü-f : 選項忽略(fold)字符串中的字符大小寫

ü-u : 選項(獨特,unique)刪除輸出中的重復行

ü-t c : 選項使用c做為字段界定符

ü-k X : 選項按照使用c字符分隔的X列來整理能夠使用多次

Uniq:從輸入中刪除重復的前后相接的行

功能:從輸入中刪除重復的前后相接的行

語法:uniq  [OPTION]… [FILE]…

參數:

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

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

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

 

連續且完全相同方為重復

v常和sort 命令一起配合使用:

sort  userlist.txt  |  uniq-c 

diffpatch:文件比較文件和補丁升級工具

功能:

v比較兩個文件之間的區別

diff  foo.conf-broken  foo.conf-works

5c5

<use_widgets=no

>use_widgets=yes

?注明第5行有區別(改變)

 

v diff命令的輸出被保存在一種叫做“補丁”的文件中,使用-u選項來輸出“統一的(unified)”diff格式文 件,最適用于補丁文件。

 vpatch命令復制在其它文件中進行的改變(要謹慎使用!)

? 適用-b選項來自動備份改變了的文件

diff   -u    foo.conf-broken     foo.conf-works > foo.patch
patch  -b    foo.conf-broken     foo.patch

§·以上命令的使用練習:

v1、找出ifconfig命令結果中本機網卡eno16777736IPv4地址?

·需要截取IP地址,我們得有命令顯示出我們的額IP地址

[root@wCentos7 ~]# ifconfig eno16777736 #顯示本機網卡的信息
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.16.70  netmask 255.0.0.0  broadcast 10.255.255.255
        inet6 fe80::20c:29ff:fe90:ef7d  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:90:ef:7d  txqueuelen 1000  (Ethernet)
        RX packets 1001183  bytes 99430689 (94.8 MiB)
        RX errors 0  dropped 93  overruns 0  frame 0
        TX packets 69994  bytes 14596210 (13.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

·觀察我們需要截取的ip地址位置,顯示出我們需要的那 IP地址那一行

[root@wCentos7 ~]# ifconfig eno16777736 | head -n2 
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.16.70  netmask 255.0.0.0  broadcast 10.255.255.255
[root@wCentos7 ~]# ifconfig eno16777736 | head -n2 | tail -1
        inet 10.1.16.70  netmask 255.0.0.0  broadcast 10.255.255.255

·找到需要截取的行,使用cut命名截取需要字段

[root@wCentos7 ~]# ifconfig eno16777736 | head -n2 | tail -1 | cut -c10-30
net 10.1.16.70  netma
[root@wCentos7 ~]# ifconfig eno16777736 | head -n2 | tail -1 | cut -c14-30
10.1.16.70  netma
[root@wCentos7 ~]# ifconfig eno16777736 | head -n2 | tail -1 | cut -c14-25  #找到截取字段
10.1.16.70

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

·查看分區利用率的命令df

[root@wCentos7 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        47G  3.7G   43G   8% /
devtmpfs        475M     0  475M   0% /dev
tmpfs           489M   88K  489M   1% /dev/shm
tmpfs           489M   14M  476M   3% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda5        19G   42M   19G   1% /testdir
/dev/sda1       187M  138M   49M  74% /boot
tmpfs            98M   12K   98M   1% /run/user/0
tmpfs            98M     0   98M   0% /run/user/1003

·使用 tail head找出我們需要的行

[root@wCentos7 ~]# df -h | tail -3
/dev/sda1       187M  138M   49M  74% /boot
tmpfs            98M   12K   98M   1% /run/user/0
tmpfs            98M     0   98M   0% /run/user/1003
[root@wCentos7 ~]# df -h | tail -3 | head -n1
/dev/sda1       187M  138M   49M  74% /boot

·通過cut命令截取出我們需要的數據

[root@wCentos7 ~]# df -h | tail -3 | head -n1 | cut -d" " -f15
74%

v3、查出用戶UID最大值的用戶名、UIDshell類型?

·我們先觀察passwd文件,看看我們需要的字段有哪些,整理如下:使用 sort  UID排序,再顯示指定行,通過cut命令截取出我們相應的數據。

[root@wCentos7 ~]# cat /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
loveme11:x:3007:3007:::
dbback11:x:3008:3008:::
BACK11:x:3009:3009:::
sb:x:5001:5001::/home/sb:/bin/bash
love1:x:5001:5001:love1:/home/love1:/bin/bash
love2:x:5002:5002:love2:/home/love2:/bin/bash
love3:x:5003:5003:love3:/home/love3:/bin/bash
love4:x:5004:5004:love4:/home/love4:/bin/bash
love5:x:5005:5005:love5:/home/love5:/bin/bash
love6:x:5006:5006:love6:/home/love6:/bin/bash
user1:x:5007:5007::/home/user1:/bin/bash
user2:x:5008:5008::/home/user2:/bin/bash
user3:x:5009:5009::/home/user3:/bin/bash
mage:x:5010:5010::/home/mage:/bin/bash
wang:x:5011:5011::/home/wang:/bin/bash

·通過sort命令UID排序

[root@wCentos7 ~]# sort -t: -k3  -n /etc/passwd
# -t : 指定分隔符為 “:” , -k : 以第三列排序(第三列為UID號),-n :以數字的小到大排序
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
gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin
love3:x:5003:5003:love3:/home/love3:/bin/bash
love4:x:5004:5004:love4:/home/love4:/bin/bash
love5:x:5005:5005:love5:/home/love5:/bin/bash
love6:x:5006:5006:love6:/home/love6:/bin/bash
user1:x:5007:5007::/home/user1:/bin/bash
user2:x:5008:5008::/home/user2:/bin/bash
user3:x:5009:5009::/home/user3:/bin/bash
mage:x:5010:5010::/home/mage:/bin/bash
wang:x:5011:5011::/home/wang:/bin/bash
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

·找到最后一行為我們需要的數據行

[root@wCentos7 ~]# sort -t: -k3  -n /etc/passwd | tail -1
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

·通過CUT命令截取出我們需要顯示的數據

[root@wCentos7 ~]# sort -t: -k3  -n /etc/passwd | tail -1 |cut -d: -f1,3,7
nfsnobody:65534:/sbin/nologin

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

·分析需要,我們可以通過stat的命令獲取到文件的數字權限,我們在來通過別的命令截取出需要的權限數字。

[root@wCentos7 /]# stat /tmp #可以顯示文件的數字權限 1777
  File: ‘/tmp’
  Size: 4096       Blocks: 8          IO Block: 4096   directory
Device: 802h/2050d Inode: 133         Links: 24
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:tmp_t:s0
Access: 2016-08-04 20:43:42.148513773 +0800
Modify: 2016-08-05 10:17:23.896929701 +0800
Change: 2016-08-05 10:17:23.896929701 +0800
 Birth: -
[root@wCentos7 /]# stat /tmp | head -n3
  File: ‘/tmp’
  Size: 4096       Blocks: 8          IO Block: 4096   directory
Device: 802h/2050d Inode: 133         Links: 24

·找到我們需要的的數據行

[root@wCentos7 /]# stat /tmp | head -n4 |tail -n1
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)

·通過cut命令截取出我們需要的數據

[root@wCentos7 /]# stat /tmp | head -n4 |tail -n1 |cut -d: -f2
 (1777/drwxrwxrwt)  Uid
[root@wCentos7 /]# stat /tmp | head -n4 |tail -n1 |cut -d: -f2 | cut -d"/" -f1
 (1777
[root@wCentos7 /]# stat /tmp | head -n4 |tail -n1 |cut -d: -f2 | cut -d"/" -f1 |cut -d"(" -f2
1777

§·grep與正則表達式

grep介紹

功能:

grep: Global search REgularexpression and Print out the line.

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

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

語法:

grep  [OPTIONS]  PATTERN  [FILE…]

grep  root        /etc/passwd

grep  "$USER"    /etc/passwd

grep  '$USER'     /etc/passwd

grep  `whoami`   /etc/passwd

參數:

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

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

v-i: 忽略字符大小寫

v-n:顯示匹配的行號

v-c: 統計匹配的行數

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

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

v-A #after, #

v-B #: before, #

v-C #context, 前后各#

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

grep e cat -e dogfile

v-w:整行匹配整個單詞

v-E:使用擴展正則表達式

正則表達式介紹:

功能:

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

程序支持:grep, vim, less,nginx

分兩類:

基本正則表達式:BRE

擴展正則表達式:ERE

grep -E, egrep grep可以直接調用擴展正則表達式 )

正則表達式引擎:

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

PCREPerl Compatible Regular Expressions

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

man 7 regex (更多幫助詳見)

基本正則表達式元字符

字符匹配:

 . :匹配任意單個字符;

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

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

[:digit:](所有數字)、[:lower:](所有小寫字母)、[:upper:](所有大寫字母)、[:alpha:](所有字母)、

[:alnum:](所有數字加字母)、[:punct:][:space:](空格和tab鍵) 

匹配次數:

用在要指定次數的字符后面,用于指定前面的字符要出現的次數

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

貪婪模式:盡可能長的匹配

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

\?:匹配其前面的字符01

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

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

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

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

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

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

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

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

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

^$: 空行

^[[:space:]]*$ :空白行

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

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

\<PATTERN\>:匹配整個單詞

分組及引用:

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

分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, … \1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符;

實例:\(string1\+\(string2\)*\)

\1: string1\+\(string2\)*

\2: string2

后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身) 

§·grep的使用練習:

1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式)?

·Ss的一定要記得是行首錨定

[root@wCentos7 /]# grep  "^[sS]"  /proc/meminfo 
SwapCached:          912 kB
SwapTotal:       3905532 kB
SwapFree:        3902664 kB
Shmem:             11932 kB
Slab:             120804 kB
SReclaimable:      61400 kB
SUnreclaim:        59404 kB

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

·不以/bin/bash結尾的,-v 取反,相反意思就是:以/bin/bash結尾的行

[root@wCentos7 /]# grep  "/bin/bash$"  etc/passwd #顯示passwd中以/bin/bash結尾的行,取反即可得到需求.
root:x:0:0:root:/root:/bin/bash
chen:x:1000:1000:chenjiashun,it,110,119:/home/ChenJiaShun:/bin/bash
natasha:x:1003:1004::/home/natasha:/bin/bash
harry:x:1004:1005::/home/harry:/bin/bash
loveme:x:5000:5000::/root/:/bin/bash
BACK:x:987:100::/home/BACK:/bin/bash
chen11:x:3001:3001:chen11:/home/chen11:/bin/bash
user11:x:3002:3002:user11:/home/user11:/bin/bash
sb:x:5001:5001::/home/sb:/bin/bash
love1:x:5001:5001:love1:/home/love1:/bin/bash
love2:x:5002:5002:love2:/home/love2:/bin/bash
love3:x:5003:5003:love3:/home/love3:/bin/bash
love4:x:5004:5004:love4:/home/love4:/bin/bash
love5:x:5005:5005:love5:/home/love5:/bin/bash
love6:x:5006:5006:love6:/home/love6:/bin/bash
user1:x:5007:5007::/home/user1:/bin/bash
user2:x:5008:5008::/home/user2:/bin/bash
user3:x:5009:5009::/home/user3:/bin/bash
mage:x:5010:5010::/home/mage:/bin/bash
wang:x:5011:5011::/home/wang:/bin/bash
[root@wCentos7 /]# grep  -v  "/bin/bash$"  etc/passwd

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

·分析需求:用戶名在passwd中,rpc用戶名應該出現在行首,并且rpc是一個獨立的單詞,我們在通過cut來截取出第7段即可。

[root@wCentos7 /]# grep " ^\brpc\b"  /etc/passwd #注意行首錨定 詞首次尾錨定
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
[root@wCentos7 /]# grep "^\brpc\b" /etc/passwd | cut -d: -f7
/sbin/nologin

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

·分析需求:grep兩位數查找為:\b[1-9][1-9]\b ;三位數 \b[1-9][1-9][1-9]\b 。

[root@wCentos7 /]# grep   -o  "\b[1-9]\{2,3\}\b"  /etc/passwd (由于粘貼無法顯示顏色區別,我就粘貼結果上來)
12    11    12    14    99    99     999     998    998     997   81   81
997   996    173   173 996  995  59  59  995  994  113

5、顯示/etc/grub2.cfg文件中,至少以一個空白字符開頭的且后面存非空白字符的行?

[root@wCentos7 /]# grep  "^[[:space:]].*[^[:space:]].*"  /etc/grub2.cfg
  load_env
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
   set default="${saved_entry}"
  menuentry_id_option="--id"
  menuentry_id_option=""
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
  set timeout_style=menu
  set timeout=5
  set timeout=5
  source ${prefix}/user.cfg
  if [ -n ${GRUB2_PASSWORD} ]; then
    set superusers="root"
    export superusers
    password_pbkdf2 root ${GRUB2_PASSWORD}
  fi
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod xfs
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1     --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  9dec22f7-215e-4a47-97d1-ae09446d62d2
else
  search --no-floppy --fs-uuid --set=root 9dec22f7-215e-4a47-97d1-ae09446d62d2
fi
linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=b63a2f0c-c9f9-465d-b2b5-3830fedccdd2 ro   crashkernel=auto rhgb quiet.UTF-8
initrd16 /initramfs-3.10.0-327.el7.x86_64.img
load_video
insmod gzio
insmod part_msdos
insmod xfs
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1     --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  9dec22f7-215e-4a47-97d1-ae09446d62d2
else
  search --no-floppy --fs-uuid --set=root 9dec22f7-215e-4a47-97d1-ae09446d62d2
fi
linux16 /vmlinuz-0-rescue-2d34ee936fa14412ad51a08dcb36643d       root=UUID=b63a2f0c-c9f9-465d-b2b5-3830fedccdd2 ro crashkernel=auto rhgb quiet
initrd16 /initramfs-0-rescue-2d34ee936fa14412ad51a08dcb36643d.img
  source ${config_directory}/custom.cfg
  source $prefix/custom.cfg;

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

[root@wCentos7 /]# netstat  -tan  | grep  "LISTEN[[:space:]]*" 
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN

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

[root@wCentos7 /]#  grep  "^\(\b[[:alnum:]]\+\b\).*\1$"   /etc/passwd
# ^ \(\b[[:alnum:]]\+\b\) .*\1$ 
紅色部分為分組:意義為任意字母與數字開頭且為單詞的用戶名;
中間 .* :中間可以出現任意字符;
后面 \1$ : 結尾為紅色部分的內容(行尾也就是shell的的名稱)
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
nologin:x:5015:5015::/home/nologin:/sbin/nologin

8、統計last命令,統計root用戶連接的IP地址分類統計?

·分析需求:我們需要過濾出不是root用戶的連接 ,排除沒有IP地址的行。

[root@wCentos7 /]# last | grep "^\broot\b.*\b\([1-9]\+\.\)\b"
# ^\broot\b :行首為root;   \b \([1-9]\+\.\) \b  : 數字出現1-9且可以多位數并且數字尾部還有 . 的行。
root     pts/0        10.1.16.1        Fri Aug  5 08:58   still logged in   
root     pts/1        10.1.16.1        Thu Aug  4 20:45 - 22:11  (01:26)    
root     pts/1        10.1.16.1        Thu Aug  4 20:43 - 20:45  (00:02)    
root     pts/1        10.1.16.1        Thu Aug  4 20:40 - 20:43  (00:02)    
root     pts/1        10.1.16.1        Thu Aug  4 17:30 - 20:40  (03:10)    
root     pts/0        10.1.16.1        Thu Aug  4 14:11 - 22:11  (08:00)    
root     pts/1        10.1.16.1        Thu Aug  4 08:31 - 11:44  (03:12)    
root     pts/1        10.1.16.1        Wed Aug  3 21:11 - 21:32  (00:20)    
root     pts/1        10.1.16.1        Tue Aug  2 17:48 - 18:09  (00:21)    
root     pts/0        10.1.16.1        Tue Aug  2 17:44 - 10:09 (1+16:25)   
root     pts/2        10.1.16.1        Tue Aug  2 17:19 - 17:41  (00:21)    
root     pts/0        10.1.16.1        Tue Aug  2 14:50 - 17:41  (02:50)    
root     pts/1        10.1.16.1        Tue Aug  2 14:38 - 17:22  (02:43)    
root     pts/0        10.1.16.1        Tue Aug  2 08:38 - 14:50  (06:11)    
root     pts/4        10.1.16.1        Sun Jul 31 14:11 - 10:36 (1+20:25)   
root     pts/3        10.1.16.1        Sun Jul 31 12:42 - 09:00 (1+20:17)   
root     pts/2        10.1.16.1        Sun Jul 31 12:18 - 09:00 (1+20:41)   
root     pts/1        10.1.16.1        Sun Jul 31 11:13 - 15:20  (04:06)    
root     pts/0        10.1.16.1        Sun Jul 31 10:17 - 15:20  (05:03)    
root     pts/0        10.1.16.1        Sun Jul 31 10:10 - 10:17  (00:06)    
root     pts/0        10.1.16.1        Sat Jul 30 17:27 - 20:39  (03:11)    
root     pts/1        10.1.16.1        Sat Jul 30 14:10 - 17:03  (02:52)    
root     pts/0        10.1.16.1        Sat Jul 30 13:24 - 17:03  (03:38)    
root     pts/1        10.1.16.1        Sat Jul 30 10:52 - 12:13  (01:20)    
root     pts/1        10.1.16.1        Sat Jul 30 10:16 - 10:52  (00:35)    
root     pts/0        10.1.16.1        Sat Jul 30 08:41 - 12:13  (03:31)    
root     pts/1        10.1.16.1        Fri Jul 29 18:15 - 20:17  (02:01)    
root     pts/1        10.1.16.1        Fri Jul 29 14:48 - 18:05  (03:16)    
root     pts/2        10.1.16.1        Fri Jul 29 11:54 - 18:05  (06:10)    
root     pts/1        10.1.16.1        Fri Jul 29 08:33 - 14:48  (06:14)    
root     pts/1        10.1.16.1        Thu Jul 28 20:27 - 20:59  (00:31)    
root     pts/2        10.1.16.1        Thu Jul 28 10:16 - 18:27  (08:10)    
root     pts/1        10.1.16.1        Thu Jul 28 08:37 - 18:27  (09:49)    
root     pts/0        10.1.16.1        Thu Jul 28 08:22 - crash  (00:13)    
root     pts/1        10.1.16.1        Wed Jul 27 22:54 - 23:52  (00:58)    
root     pts/0        10.1.16.1        Wed Jul 27 22:51 - 23:52  (01:01)    
root     pts/3        10.1.16.1        Wed Jul 27 10:09 - crash  (22:27)    
root     pts/2        10.1.16.1        Wed Jul 27 09:07 - 10:09  (01:01)    
root     pts/1        10.1.16.1        Wed Jul 27 08:22 - 10:40  (02:18)    
root     pts/0        10.1.16.1        Tue Jul 26 18:27 - 10:29  (16:02)    
root     pts/0        10.1.16.1        Tue Jul 26 15:06 - 17:01  (01:54)    
root     pts/0        10.1.16.1        Tue Jul 26 11:17 - down   (03:47)    
root     pts/0        10.1.16.1        Tue Jul 26 11:00 - crash  (00:15)    
root     pts/0        10.1.16.1        Tue Jul 26 10:51 - 11:00  (00:08)    
root     pts/0        10.1.16.1        Fri Jul 22 16:04 - 19:30  (03:26)    
root     pts/0        192.168.71.1     Fri Jul 22 14:52 - 15:52  (01:00)    
root     pts/0        192.168.71.1     Fri Jul 22 14:43 - 14:52  (00:09)    
root     pts/0        192.168.71.1     Fri Jul 22 14:40 - 14:43  (00:02)    
root     pts/0        192.168.71.1     Fri Jul 22 14:38 - 14:40  (00:01)    
root     pts/0        192.168.71.1     Fri Jul 22 14:27 - 14:29  (00:01)    
root     pts/0        192.168.71.1     Fri Jul 22 14:23 - 14:24  (00:01)    
root     pts/0        192.168.71.1     Fri Jul 22 14:20 - 14:22  (00:01)    
root     pts/0        192.168.71.1     Fri Jul 22 14:15 - 14:19  (00:04)    
root     pts/0        192.168.71.1     Fri Jul 22 14:03 - 14:14  (00:10)    
root     pts/3        192.168.71.1     Fri Jul 22 13:57 - crash  (00:04)    
root     pts/2        192.168.71.1     Fri Jul 22 12:47 - crash  (01:14)    
root     pts/1        192.168.71.1     Fri Jul 22 08:30 - crash  (05:31)    
root     pts/1        192.168.71.1     Thu Jul 21 20:00 - 20:09  (00:09)    
root     pts/0        192.168.71.1     Thu Jul 21 18:35 - down   (13:37)    
root     pts/0        192.168.71.1     Thu Jul 21 17:18 - 18:35  (01:17)    
root     pts/0        192.168.71.1     Thu Jul 21 16:43 - 17:16  (00:32)    
root     pts/0        192.168.71.1     Thu Jul 21 16:42 - 16:43  (00:01)    
root     pts/0        192.168.71.1     Thu Jul 21 16:02 - 16:41  (00:39)    
root     pts/1        192.168.71.1     Thu Jul 21 14:12 - 16:01  (01:49)    
root     pts/1        192.168.71.1     Thu Jul 21 14:09 - 14:11  (00:02)

·截取出IP地址的那一列做統計即可

[root@wCentos7 /]# last | grep "^\broot\b.*\b\([1-9]\+\.\)\b"| cut  -c22-35 |uniq -c
     45  10.1.16.1    
     20  192.168.71.1

§·egrep與擴展正則表達式

egrep介紹

功能:

功能和grep的功能一樣,就是egrep可以支持擴展的正則表達式,gerp通過-E參數也可以調用egrep。

v egrep= grep -E

語法:egrep[OPTIONS] PATTERN [FILE…]

參數:參數與grep相同,由于grep可以使用-E 直接調用egrep,所以參數是一樣的 

擴展正則表達式介紹

字符匹配:

. 任意單個字符

[] 指定范圍的字符

[^] 不在指定范圍的字符

次數匹配:

*:匹配前面字符任意次

?: 01

+1次或多次

{m}:匹配m

{m,n}:至少m,至多n

位置錨定:

^ :行首

$ :行尾

\<, \b :語首

\>, \b :語尾

分組:

()

后向引用:

\1, \2, …  v或者:  a|b    C|cat: Ccat     (C|c)at:Catcat

§·egrep的使用練習:

1、顯示當前系統root、magewang用戶的UID和默認shell?

[root@wCentos7 ~]# egrep "^\b(root|mage|wang)\b" /etc/passwd | cut -d: -f1,3,7
#egrp的或表達式為 (a|b|c),用戶名應該出現在行首,并且用戶名應該詞首詞尾錨定
root:0:/bin/bash
mage:5010:/bin/bash
wang:5011:/bin/bash

2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行?

[root@wCentos7 ~]# egrep  "^\b[a-z|A-Z|\_].*\b\("  /etc/rc.d/init.d/functions
#^\b[a-z|A-Z|\_].*\b\(  
開始為:^ 詞首錨定
紅色部分為單詞或_的行首行尾錨定
\( :為轉義 (
 
checkpid() {
__pids_var_run() {
__pids_pidof() {
daemon() {
killproc() {
pidfileofproc() {
pidofproc() {
status() {
echo_success() {
echo_failure() {
echo_passed() {
echo_warning() {
update_boot_stage() {
success() {
failure() {
passed() {
warning() {
action() {
strstr() {
is_ignored_file() {
is_true() {
is_false() {
apply_sysctl() {

3、使用egrep取出/etc/rc.d/init.d/functions中其基名?

基名:functions,取出functions即可 

 

4、使用egrep取出上面路徑的目錄名?

[root@wCentos7 ~]# echo "/etc/rc.d/init.d/functions"|  egrep -o "^\/.*\/"
/etc/rc.d/init.d/

5、統計以root身份登錄的每個遠程主機IP地址的登錄次數?

[root@wCentos7 /]# last | grep "^\broot\b.*\b\([1-9]\+\.\)\b"| cut  -c22-35 |uniq -c
     45  10.1.16.1    
     20  192.168.71.1

6、利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255?

#一定記得要詞首詞尾錨定0-9     :  egrep  "\b[0-9]\b"10-99   :  egrep "\b[1-9][0-9]\b" num1 100-199 :  egrep "\b[1-9][0-9][0-9]\b" num1 200-249 :  egrep "\b2[0-4][0-9]\b" num1 250-255 :  egrep "\b25[0-5]\b" num1

7、顯示ifconfig命令結果中所有IPv4地址?

[root@wCentos7 ~]# ifconfig  | egrep  -o 
"(\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>)\.
 #取出數字為1-254后面加上一個 .  號
(\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>)\.
#取出數字為1-254后面加上一個 .  號
(\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>)\.
#取出數字為1-254后面加上一個 .  號
(\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>)"
#取出數字為1-254后面加上一個 .  號
10.1.16.70
192.168.122.1
[root@wCentos7 ~]#

§·Sed文件處理工具(下期更新)

 

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

(0)
linux_rootlinux_root
上一篇 2016-08-05
下一篇 2016-08-05

相關推薦

  • 文本處理工具

    1, head  默認顯示前十行 -n  +行號 顯示前n行 -行號 顯示前n行 -c 字節數 顯示前n個字節 tail 默認顯示后十行 -n +行號 顯示后n行 – 行號 顯示后n行 -f 動態顯示 cut -d 指定分隔符 -f 選取第幾列 –output-delimiter 指定輸出符 相關的實際操作: a,…

    2017-07-29
  • LANMT架構搭建jspxcms

                    LANMT架構搭建jspxcms 前言 LANMT是什么? 實驗拓撲圖 實驗環境 實驗步驟 Tomcat配置 MySQL配置 jspxcms安裝 Apache Http…

    Linux干貨 2016-04-22
  • vsftpd虛擬用戶搭建

    首選的FTP服務器搭建方式 安裝vsftpd      yum install -y vsftpd      systemctl enable vsftpd     #設置開機啟動      systemctl is-enabled vsf…

    Linux干貨 2017-04-27
  • shell腳本初步

    shell腳本編程初步 程序:由數據和指令組成, 指令:由程序文件提供 數據:可以通過IO設備、文件、管道來得到, 程序:算法+數據結構 變量:變量名+變量名指向的內存空間 變量賦值: name = value變量類型:存儲格式:字符 數值(精確數值 近似數值)   表示數據范圍  &nb…

    Linux干貨 2016-08-15
  • vim編輯器

    vim基礎的認識

    2017-11-26
  • OPENSSL&DNS

      1、詳細描述一次加密通訊的過程,結合圖示最佳。 Client 從互聯網下載CA的公鑰,用于驗證Server身份 Server 通過加密算法生成一對密鑰,將公鑰發給CA認證機構,做數字證書 CA 通過自己的私鑰加密 Server 公鑰并加上自己的數字簽名后,將生成的數字證書發給Server Client 與 Server 通TCP的三次握手建立連…

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