溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

linux文本處理工具及正則表達(dá)式的示例分析

發(fā)布時(shí)間:2021-07-15 10:09:07 來源:億速云 閱讀:219 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹linux文本處理工具及正則表達(dá)式的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

cat命令:查看文本內(nèi)容

         cat [選項(xiàng)]... [文件]...

         -E    顯示行結(jié)束符

         -n    顯示文本內(nèi)容時(shí)顯示行號

         -A    顯示所以控制符

         -b    非空行編號

         -s     壓縮連續(xù)的空行成一行

[root@bogon ~]# cat -n /etc/issue > test.txt    ##查看文件內(nèi)容并顯示行號,重定向到test.txt文件中
[root@bogon ~]# cat test.txt 
  1 \S
  2 Kernel \r on an \m
  3 
[root@bogon ~]# cat > file <<EOF    ##創(chuàng)建file文件,輸入內(nèi)容以EOF結(jié)束
> kernel \r on an \m
> EOF
[root@bogon ~]# cat file 
kernel \r on an \m

more       分頁顯示

         more [OPTIONS...] FILE...

less  分頁顯示,是man命令使用的分頁器

[root@bogon ~]# less /etc/httpd.conf
[root@bogon ~]# cat /etc/httpd.conf |more

head命令 :

         head [OPTION]... [FILE]...

    -n  顯示文件前n行,默認(rèn)顯示前10行

    -c # 顯示文件前#個(gè)字節(jié)內(nèi)容

    -q  不顯示包含給定文件名的文件頭

[root@bogon ~]# head -5 /etc/fstab     ##顯示文件前5行
#
# /etc/fstab
# Created by anaconda on Mon May 1 04:49:06 2017
#
[root@bogon ~]# head -q -n 5 /etc/fstab /etc/issue    ##顯示多個(gè)文件前5行,并且不顯示文件頭
#
# /etc/fstab
# Created by anaconda on Mon May 1 04:49:06 2017
#
\S
Kernel \r on an \m  

tail命令:

tail [OPTION]... [FILE]...

         -f   實(shí)時(shí)查看,常用監(jiān)控日志文件

   -c #   顯示后#字節(jié)

   -n #  顯示后#行,默認(rèn)顯示行10行

[root@bogon ~]# tail -2 /etc/passwd    ##顯示文件后2行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@bogon ~]# tail -f /var/log/messages    ##不停地去讀最新的內(nèi)容,有實(shí)時(shí)監(jiān)視的效果,用Ctrl+c來終止
May 2 02:46:26 localhost systemd: Configuration file /usr/lib/systemd/system/wpa_supplicant.service is marked executable. Please remove executable permission bits. Proceeding anyway. May 2 02:46:26 localhost yum[16325]: Installed: httpd-2.4.6-45.el7.centos.4.x86_64 May 2 03:01:01 localhost systemd: Started Session 10 of user root. May 2 03:01:01 localhost systemd: Starting Session 10 of user root. May 2 03:45:49 localhost systemd-logind: Removed session 4. May 2 03:46:20 localhost systemd: Started Session 11 of user root. May 2 03:46:20 localhost systemd-logind: New session 11 of user root. May 2 03:46:20 localhost systemd: Starting Session 11 of user root. May 2 04:01:01 localhost systemd: Started Session 12 of user root. May 2 04:01:01 localhost systemd: Starting Session 12 of user root.

 cut命令:

cut [OPTION]... [FILE]...

  -d  指明分隔符,默認(rèn)tab

  -f  第# 個(gè)字段

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

  #-# :連續(xù)的多個(gè)字段,  例如1-6

  混合使用:1-3,7

  -c 按字符切割

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

 顯示文件前10行,以“:”作為分隔符打印第1和第7個(gè)字段并分隔符換成空格輸出:

[root@bogon ~]# head /etc/passwd |cut -d ":" -f1,7 --output-delimiter="  "  ##查看系統(tǒng)用戶使用的shell
root  /bin/bash      
bin  /sbin/nologin
daemon  /sbin/nologin
adm  /sbin/nologin
lp  /sbin/nologin
sync  /bin/sync
shutdown  /sbin/shutdown
halt  /sbin/halt
mail  /sbin/nologin
operator  /sbin/nologin
[root@bogon ~]# ip addr |tail -4 |head -1 |cut -d "/" -f1 |cut -d " " -f6  ##獲取ip地址
192.168.25.102

paste命令:

  paste [OPTION]... [FILE]...

  -d  分隔符: 指定分隔符,默認(rèn)用TAB

  -s     所以行合并成一行顯示

[root@bogon ~]# paste /etc/resolv.conf /etc/issue    ##合并輸出兩個(gè)文件的內(nèi)容
# Generated by NetworkManager  \S
nameserver 202.106.46.151  Kernel \r on an \m
nameserver 202.106.195.68  
[root@bogon ~]# paste -s /etc/issue    ##對輸出的內(nèi)容獨(dú)立占一行
\S  Kernel \r on an \m

wc命令:統(tǒng)計(jì)文件內(nèi)容

         -l      統(tǒng)計(jì)行數(shù)

         -w    統(tǒng)計(jì)單詞個(gè)數(shù)

         -c     統(tǒng)計(jì)字節(jié)數(shù)

         -m    只計(jì)數(shù)字符總數(shù)

     -L  打印最長行的長度

[root@bogon ~]# cat /etc/passwd |wc -l  ##統(tǒng)計(jì)文件的行數(shù)
22
[root@bogon ~]# echo "aaa bbb ccc" |wc -w    ##統(tǒng)計(jì)輸出的單詞數(shù)量
3
[root@bogon ~]# echo "abcdef" |wc -m    ##統(tǒng)計(jì)輸出有多少個(gè)字節(jié)
7

文本排序:sort [options] file(s)

  -r   逆序排序

  -n   根據(jù)字符串?dāng)?shù)值進(jìn)行比較

  -f   忽略字符大小寫

  -u   去重。配合-c,嚴(yán)格校驗(yàn)排序;不配合-c,則只輸出一次排序結(jié)果

  -t   使用指定的分隔符代替非空格到空格的轉(zhuǎn)換

  -k 1 在位置1 開始一個(gè)key,在位置2 終止(默認(rèn)為行尾)

[root@bogon ~]# head /etc/passwd |sort -t ":" -k 3nr    ##以“:”分割對第三個(gè)字段數(shù)值進(jìn)行倒序排列
operator:x:11:0:operator:/root:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@bogon ~]# cat /etc/passwd |sort -t':' -k 7 -u    ##以“:”分割對第7個(gè)字段排序,去重
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
bin:x:1:1:bin:/bin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

uniq 命令:從輸入中刪除重復(fù)的前后相接的行

   uniq [OPTION]... [FILE]...

  -c:  顯示每行重復(fù)出現(xiàn)的次數(shù);

  -d:  僅顯示重復(fù)過的行;

  -u:  僅顯示唯一的行;

  -i:  比較時(shí)不區(qū)分大小寫

[root@bogon ~]# uniq -c ip.txt     ##顯示重復(fù)行出現(xiàn)的次數(shù),相鄰行且完全一樣為重復(fù)
   3 101.200.78.99
   1 103.41.52.94
   2 106.185.47.161
   1 101.200.78.99
   2 113.240.250.155
   1 13.0.782.215
   1 185.130.5.231

文件比較:

diff命令:比較兩個(gè)文件之間的區(qū)別

  -r  遞歸比較

  -u  輸出“統(tǒng)一的(unified )

  patch 命令復(fù)制在其它文件中進(jìn)行的改變(要謹(jǐn)慎使用!)

  -b   選項(xiàng)來自動(dòng)備份改變了的文件

[root@bogon ~]# diff file1.txt file2.txt 
8c8      ##表示第8行有區(qū)別
< 113.240.250.155
---
> 133.240.250.155

替換和刪除字符:

         tr [OPTION]... SET1 [SET2]

                   -c 或——complerment :取字符集的補(bǔ)集

                   -d 或——delete :刪除所有屬于第一字符集的字符;

                   -s 或—squeeze-repeats :把連續(xù)重復(fù)的字符以單獨(dú)一個(gè)字符表示

                   -t 或--truncate-set1 :先刪除第一字符集較第二字符集多出的字符

[root@bogon ~]# tr -s '\n' < file1.txt     ##刪除空行
103.41.52.94
106.185.47.161
\S
Kernel \r on an \m
106.185.47.161
[root@bogon ~]# tr A-Z a-z < file1.txt     ##把大寫字母換成小寫
103.41.52.94
106.185.47.161
\s
kernel \r on an \m
106.185.47.161

grep命令:過濾文本內(nèi)容

         grep [OPTIONS] PATTERN [FILE...]

         -i       查找時(shí)忽略大小寫

         -v     取反

    -n      顯示匹配的行號

     -c     統(tǒng)計(jì)匹配的行數(shù)

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

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

  -A #   after,  后#行 行

  -B #  before,  前#行 行

  -C #   context,  前后各#行 行

  -e   實(shí)現(xiàn)多個(gè)選項(xiàng)間的邏輯or 關(guān)系

  -w   整行匹配整個(gè)單詞

  -E   使用擴(kuò)展正則表達(dá)式

正則表達(dá)式:

.     匹配任意單個(gè)字符;

[]    匹配指定范圍內(nèi)的任意單個(gè)字符

[^]  匹配指定范圍外的任意單個(gè)字符

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

.*   任意長度的任意字符

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

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

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

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

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

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

^   行首錨定,用于模式的最左側(cè)

$   行尾錨定,用于模式的最右側(cè)

^PATTERN$  用于模式匹配整行

^$   空行

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

\< 或 或 \b   詞首錨定,用于單詞模式的左側(cè)

\> 或 或 \b   詞尾錨定;用于單詞模式的右側(cè)

\<PATTERN\>   匹配整個(gè)單詞

\(\)    將一個(gè)或多個(gè)字符捆綁在一起,當(dāng)作一個(gè)整體進(jìn)行處理

[:alpha:] 所有字母,包括大、小寫

[:alnum:] 所有字母和數(shù)字

[:upper:] 所有大寫字母

[:lower:] 所有小寫字母

[:digit:] 所有數(shù)字

[:punct:] 所有標(biāo)點(diǎn)符號

[:space:] 空格和Tab

擴(kuò)展正則表達(dá)式:

.    任意單個(gè)字符

[]    指定范圍的字符

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

*   匹配前面字符任意次

?   0 或1次 次

+   1 次或多次

{m}   匹配m次

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

^  行首

$   行尾

\<, \b  語首

\>, \b    語尾

分組  ()

  后向引用:\1, \2, ...

     或者:a|b

     C|cat: C 或cat

     (C|c)at:Cat 或cat

[root@bogon ~]# grep '^\(root\|apache\)' test.txt   ##過濾以root或apache開頭的行
root:x:0:0:root:/root:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@bogon ~]# grep -R /sbin/nologin *     ##遞歸從所以文件中查詢匹配的內(nèi)容
test.txt:bin:x:1:1:bin:/bin:/sbin/nologin
test.txt:daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@bogon ~]# ip addr |grep "dynamic" |tr -s " " |cut -d " " -f3 |cut -d "/" -f1  ##過濾ip地址
192.168.25.102
[root@bogon ~]# ip addr |grep -E -o "([0-9]{1,3}[\.]){1,3}[0-9]{1,3}"
127.0.0.1
192.168.25.102
192.168.25.255
[root@bogon ~]# df -Th |tr -s " " |sort -k 6nr |head -1  ##查出使用率的最大百分比值的分區(qū)
/dev/sda1 xfs 497M 125M 373M 25% /boot
[root@bogon ~]# cat /etc/passwd |sort -t ':' -k 3n |tail -1 |cut -d ":" -f1,3,7
systemd-bus-proxy:999:/sbin/nologin      ##找出uid最大值的用戶,并顯示用戶名、UID、及shell類型

以上是“l(fā)inux文本處理工具及正則表達(dá)式的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI