文本處理工具基礎應用

                                                                          文本處理工具


文本工具

文件查看命令:cat,tac,rev

cat:連接文件并顯示到標準輸出設備上

選項

-E:顯示行結束符$

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

-A:顯示所有控制符

-b:非空行編號

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

[root@localhost ~]# cat -n a ==>編號
     1	aaaaa
     2	
     3	
     4	eeeee
[root@localhost ~]# cat -E a ==>行結束符
aaaaa$
$
$
eeeee$
[root@localhost ~]# cat -A a ==>所有控制符
aaaaa$
$
$
eeeee$
[root@localhost ~]# cat -sn  a ==>壓縮連續空行并編號
     1	aaaaa
     2	
     3	eeeee
[root@localhost ~]# cat -b  a ==>非空行編號
     1	aaaaa


     2	eeeee

tac:將文件以行尾單位反序輸出 ==>和cat相反

[root@localhost ~]# cat a
aaaaa


eeeee
[root@localhost ~]# tac a ==>反序輸出
eeeee


aaaaa
[root@localhost ~]#

rev:將文件的每行內容以字符為單位反序輸出,即第一個最后輸出,最后一個字符最先輸出,依次

[root@localhost ~]# cat b
1 2 3 4 5 6 7 8 9 10
[root@localhost ~]# rev b
01 9 8 7 6 5 4 3 2 1   ==>注意是以字符為單位反序輸出

more:分頁查看文件 ==>只能向前瀏覽

常用翻頁快捷鍵:

space :每次翻一屏

enter:每次翻一行

b:顯示上一屏內容

q:退出

less:和more相似 

常用翻頁選項

PageUp:向上翻一行,

PageDown:向下翻一行

space :每次翻一屏

enter:每次翻一行

/pattern:搜索關鍵字

n/N:跳到上一個或者下一個關鍵字

head:顯示文件前#行,默認顯示10行

tail:顯示文件的后#行。默認10行

[root@localhost ~]# cat a
aaaaa
11111
22222
eeeee
55555
66666
00000
[root@localhost ~]# head -3 a ==>顯示前三行
aaaaa
11111
22222
[root@localhost ~]# tail -3 a ==>顯示后三行
55555
66666
00000

選項:

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

-n #:指定獲取前或后#行

-# :指定行數

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

日志監控:tail -n 0 -f  /var/log/messages  只顯示新日志信息,其他不顯示

cut:顯示行中的指定部分,刪除文件中指定字段

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

-f 字段:

   #:第#個字段

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

   #-#:連續的多個字段

-c:按字符切割

簡單實用案例

顯示用戶wangcai 默認的shell 程序

[root@localhost ~]# getent passwd wangcai
wangcai:x:4325:4325::/home/wangcai:/bin/bash
[root@localhost ~]# getent passwd wangcai|cut -d: -f7 ==>以:為分隔符,第七個字段就是shell
/bin/bash

paste:將多個文件按照隊列進行合并

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

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

[root@localhost ~]# paste -d: a b ==>使用分隔符:來按照隊列合并
aaaaa:
11111:1 2 3 4 5 6 7 8 9 10
22222:x c v b e r t y q qw
eeeee:
55555:
66666:
00000:
[root@localhost ~]# paste -s a b  ==>合并成一行顯示
aaaaa	11111	22222	eeeee	55555	66666	00000
	1 2 3 4 5 6 7 8 9 10	x c v b e r t y q qw

wc:單詞統計,顯示單詞字節行數

-c:顯示字節

-l:顯示行

-w:單詞

[root@localhost ~]# cat -A a
aaaaa$
11111$
22222$
eeeee$
55555$
66666$
00000$
[root@localhost ~]# cat a |wc 
      7       7      42        ==>7行,7個單詞,42個字節

sort:將文件排序,并將文件排序結果標準輸出

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

-n:執行案數字排序

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

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

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

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

[root@localhost ~]# sort -r a ==>方向排序
66666
55555
11111
00000


[root@localhost ~]# sort -n a ==>數字排序


00000
11111
55555
66666
[root@localhost ~]# sort -u a ==>刪除重復行

00000
11111
55555
66666

以上為簡單列子,實際運用后面作業里會詳細說明

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

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

-d:僅顯示重復過的行

-u:僅顯示不重復的行

連續且完全相同為重復

[root@localhost ~]# uniq -c a ==>重復行出現次數
      1 11111
      2 
      1 55555
      1 66666
      1 00000
[root@localhost ~]# uniq -d a ==>僅顯示重復行

[root@localhost ~]# uniq -u a ==>僅顯示不重復行
11111
55555
66666
00000

diff:逐行比較文件的不同之處

[root@localhost ~]# ll hah/ ==>文件1,2,3
total 8
-rw-r--r-- 1 root root 6 Aug  5 20:41 1
-rw-r--r-- 1 root root 6 Aug  5 20:41 2
-rw-r--r-- 1 root root 6 Aug  5 20:40 3
[root@localhost ~]# ll heh/ ==>文件3,4,5
total 0
-rw-r--r-- 1 root root 0 Aug  5 20:40 3
-rw-r--r-- 1 root root 0 Aug  5 20:40 4
-rw-r--r-- 1 root root 0 Aug  5 20:40 5
[root@localhost ~]# diff heh  hah
Only in hah: 1
Only in hah: 2  ==>比較目錄下相同文件名的文件,不會對目錄中的文件進行比較
Only in heh: 4
Only in heh: 5

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

    使用 -u 選項來輸出“統一的(unified )”diff 格式文 件,最適用于補丁文件。

      

patch 命令復制在其它文件中進行的改變(要謹慎使用?。?/p>

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

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

$ patch -b foo.conf-broken foo.patch

文本處理三劍客:

grep :(global search regular expression(RE) and print out the line

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

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

選項:

–color=auto:對匹配到的文本著色顯示; ==>centos7上以定義別名alias grep='grep –color=auto'

-v:顯示不能被模式匹配到的行

-i:忽略字符大小寫

-n:顯示匹配到的行號

-c:統計匹配的行數

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

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

-A #:after,顯示后#行

-B #:before, 顯示前#行

-C #:context,前后各#行

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

     grep –e ‘cat ’ -e ‘dog’ file

-w:整行匹配整個單詞

-E:支持ERE(擴展正則表達式)

[root@localhost ~]# cat a

11111
AAAAA
aaaaa
55555
66666
00000
[root@localhost ~]# grep -i 'a' a   ==>忽略大小寫,匹配到aaaaa和AAAAA
AAAAA
aaaaa
[root@localhost ~]# grep -c 'a' a   ==>匹配到一次
1
[root@localhost ~]# grep -ci 'a' a  ==>匹配到兩次
2
[root@localhost ~]# grep -o 'a' a   ==>僅顯示匹配的內容
a
a
a
a
a
[root@localhost ~]# grep -oi 'a' a  ==>僅顯示匹配的內容
A
A
A
A
A
a
a
a
a
a
[root@localhost ~]# cat a|grep -A2 "a" ==>匹配的后兩行
aaaaa
55555
66666
[root@localhost ~]# cat a|grep -B2 "a"  ==>匹配的前兩行
11111
AAAAA
aaaaa
[root@localhost ~]# cat a|grep -C2 "a"  ==>匹配的前后各兩行
11111
AAAAA
aaaaa
55555
66666

基本正則表達式的元字符:

字符匹配:

.  :匹配任意單個字符

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

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

[:digit:]:數字

[:lower:]:小寫字母

[:upper:]:大寫字母

[:alpha:]:所有字母

[:alnum:]:所有數字和字母

[:space:]:空白字符(包含空格和tab)

[:punct:]:標點符號

[root@localhost ~]# cat a|grep 'A'  ==>匹配字符A
AAAAA
[root@localhost ~]# cat a|grep '[^A]' ==>匹配A以外的任意字符
11111
aaaaa
55555
66666
00000
[root@localhost ~]# cat a|grep '[[:digit:]]' ==>匹配數字
11111
55555
66666
00000

次數匹配

*   :匹配前面的字符任意此,包括0次  ==>默認貪婪模式,盡可能長的匹配

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

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

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

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

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

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

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

位置錨定

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

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

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

^$:空行

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

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

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

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

小使用案例:

執行了指令:grep "\<[0-9]\{2,3\}\>" /etc/passwd

blob.png

說明:

\< \>:錨定了詞首和詞尾,說明匹配的是整個單詞

[0-9]:數字

\{2,3\}:前面數字出現了2-3次

/etc/passwd  :指定文件

上面表示找出/etc/passwd文件中的兩位數或三位數

分組及引用

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

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

      這些變量的命名方式為:\1,\2,\3,….

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

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

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

            \2:string2

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

blob.png

blob.png

egrep:擴展正則表達式,和grep  -E效果相似

字符匹配:

.  :任意單個字符

[] :指定范圍內的字符

[^]:指定范圍外的字符

次數匹配:

*  :匹配前面字符任意次

? :0次或1次

+  :至少一次

{m} :匹配m次

{m,n}:匹配至少m次,至多n次

位置錨定:

^:錨定行首

$:錨定行尾

\<或\b:錨定詞首

\>或\b:錨定詞尾

上面的小案例,使用擴展正則表達式來解決

blob.png

\< \>:錨定詞首詞尾,匹配單詞

[0-9]:數字

{2,3}:2次或者3次,這里和上面的不同,沒有使用轉義符"\"

/etc/passwd:文件

找出/etc/passwd文件中的兩位數或三位數,和上面結果一樣

分組:

()

 后向引用: \1,\2

或者

a|b

C|cat  :C或者cat

(C|c)at: Cat或cat

擴展正則表達式其實和基本正則表達式差不多,差異在于,擴展正則表達式在使用元字符時,

不需要用于轉義的"\"

以上都是些概念性的知識,不是很好理解,在博客作業中有實際用法

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

(0)
qiuweiqiuwei
上一篇 2016-08-07
下一篇 2016-08-07

相關推薦

  • 網絡基礎知識

    網絡基礎知識: 網絡設備 TCP/IP協議 ARP協議 網絡設備:     HUB集線器: 工作在物理層,沒有學習能力,作用在于把各種節點匯聚在以它為中心的節點上,同時也有傳輸數據的作用,由于沒有學習能力,只能以廣播的形式將數據發送給與它相連的所有節點。 特點:共享帶寬,半雙工     &…

    Linux干貨 2016-09-02
  • 內核相關

    內核兩大流派單內核微內核 grub分為三個階段:1階段 1.5階段 2階段 內核階段 通過/proc/cmdline找到根并掛載2階段內容是放在/boot/grub目錄下Centos6 實驗:丟失除grub.conf外所有文件沒有修復過的時候/boot/grub下文件是放在磁盤上某個位置的修復過一次后/boot/grub下文件就起作用了,一旦執行過grub-…

    Linux干貨 2018-01-03
  • ansible部署KeepAlived動態站點

    一、設計原因 利用ansible可以自動化部署KeepAlived 的雙方模型(其中包括兩個動態的站點),多組服務器需要一樣的部署時 可以利用ansible寫的程序來代替重復性的操作。 二、設計拓撲結構及服務器詳情   三、詳細步驟 1、環境的搭建 (1)安裝ansible,同時配置私鑰免密碼進行通信 [root@localhost ~]# ssh…

    2015-05-13
  • grep,find

    顯示當前系統上root、fedora、user用戶的默認shell: 2.找出/etc/rc.d/init.d/functions文中單詞后跟一組小括號的行 3.使用echo命令輸出一個絕對路徑,使用grep取出其基名: 4.找出ifconfig命令結果中的1-255之間的數字 5.寫一個模式,匹配合理的ip地址 6.寫一個模式,匹配出郵箱地址 7.查找/v…

    Linux干貨 2016-11-27
  • 進程,自動化任務與安全

    進程     進程就是一段存儲了一個指令集的內存空間    相關命令:        pstree:顯示當前運行的進程樹,按樹狀結構顯示     &n…

    Linux干貨 2017-04-02
  • Week 1–Linux基礎2

    四. Linux系統命令使用格式:  但首先,在linux中我們要知道linux系統中基本的命令格式如下: 命令字 【命令選項】 【命令參數】   Command 【option】 【arguments】 在這里主要介紹這幾個命令的使用格式(Ifconfig,echo, tty, startx, export, pwd, history, shut…

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