linux学習21運営メンテナンスコア省エネ-egrep進級及びテキスト処理ツール応用

25438 ワード

一、egrep
1、grep:基本正規表現、grep-Eを使用して拡張正規表現をサポートする
egrep:正規表現を拡張し、egrep-Gを使用して基本正規表現を使用
fgrep:正規表現はサポートされていません
2、egrepは拡張の正規表現をサポートし、grepテキストフィルタ機能、grep-Eに類似する
a、オプション
      -i,-o,-v,-q,-A,-B,-C
-G:基本正規表現をサポート
3、正規表現を拡張するメタ文字
a、文字マッチング
      .:任意の1文字
[]:指定範囲内の任意の文字
[^]:範囲外の任意の文字を指定
b、回数マッチング
*:任意の回数、0、1または複数
      ?:0回または1回、その前の文字はあってもなくてもよい
+:前の文字は少なくとも1回
{m}:その前の文字m回
{m,n}:少なくともm回、最大n回
        {0,n}
        {m,}
c、位置アンカー
^:行頭アンカー
$:行末アンカー
      \
>,b:語尾アンカー
d、グループ及び参照
():グループ化され、カッコ内のパターンが一致する文字が正規表現エンジンの内部変数に記録されます.
後方参照:1,2
e、または
a|b:aまたはb
C|cat:Cまたはcatに一致
(c|C)at:catまたはCatに一致
4、練習
(1)、/proc/meminfoファイルの大文字または小文字で始まるすべての行を探し出す.少なくとも3つの実装方法があります
[root@node1 ~]# cat /proc/meminfo |grep -i "^[sS]"
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              8872 kB
Slab:             236396 kB
SReclaimable:     167468 kB
SUnreclaim:        68928 kB
[root@node1 ~]# cat /proc/meminfo |grep -i "^S"
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              8872 kB
Slab:             236396 kB
SReclaimable:     167468 kB
SUnreclaim:        68928 kB
[root@node1 ~]# cat /proc/meminfo |grep  "^[sS]"
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              8872 kB
Slab:             236396 kB
SReclaimable:     167468 kB
SUnreclaim:        68928 kB
[root@node1 ~]# cat /proc/meminfo |grep -E "^(s|S)"
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:              8872 kB
Slab:             236396 kB
SReclaimable:     167468 kB
SUnreclaim:        68928 kB

(2)、現在のシステム上のroot、centosまたはuser 1ユーザに関する情報を表示する
[root@node1 ~]# cat /etc/passwd|grep -E "^(root|centos|user1)\>"
root:x:0:0:root:/root:/bin/bash
centos:x:5002:5002::/home/centos:/bin/bash
user1:x:5010:5011::/home/user1:/bin/csh

(3)、/etc/rcを探し出す.d/init.d/functionsファイルの単語の後ろに括弧の行が付いている
[root@node1 ~]# cat /etc/rc.d/init.d/functions |grep -E "[[:alnum:]]+\(\)"
checkpid() {
__kill_pids_term_kill_checkpids() {
__kill_pids_term_kill() {
__pids_var_run() {
__pids_pidof() {
daemon() {
killproc() {
pidfileofproc() {
pidofproc() {
...

(4)、echoコマンドを使用して絶対パスを出力し、egrepを使用してベース名を取り出す
[root@node1 ~]# echo "/etc/sysconfig" |grep -Eo "[^/]+$"
sysconfig

さらに、パス名を取り出します.dirnameコマンドを実行した結果と同様
(5)、ifconfigコマンド結果の1-255間の数値を探し出す
[root@node1 ~]# ifconfig |grep -E -o "\[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

(6)、課外作業:ifconfig命令結果中のIPアドレスを探し出す
(7)、ユーザーbash、testbash、basherおよびnologin(shellは/sbin/nologin)を追加する.その後、/etc/passwdファイルのユーザー名とshell名の行を見つけます.
[root@node1 ~]# useradd bash
[root@node1 ~]# useradd basher
[root@node1 ~]# useradd -s /sbin/nologin nologin
[root@node1 ~]# useradd testbash
[root@node1 ~]# usermod -s /bin/bash bash
[root@node1 ~]# usermod -s /bin/bash basher 
[root@node1 ~]# usermod -s /bin/bash testbash 
[root@node1 ~]# tail -4 /etc/passwd
bash:x:5012:5013::/home/bash:/bin/bash
basher:x:5013:5014::/home/basher:/bin/bash
nologin:x:5015:5016::/home/nologin:/sbin/nologin
testbash:x:5016:5017::/home/testbash:/bin/bash
[root@node1 ~]# grep -E "^([^:]+\>).*\1$" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
bash:x:5012:5013::/home/bash:/bin/bash
nologin:x:5015:5016::/home/nologin:/sbin/nologin

二、fgrep:正規表現メタ文字はサポートされていません
1、メタ文字でモードを書く必要がない場合、fgrepを使うほうが性能が良い
三、テキスト表示及び処理ツール
  1、wc:word count
    wc [OPTION]... [FILE]...     wc [OPTION]... --files0-from=F
[root@node1 ~]# wc /etc/fstab 
 11  54 465 /etc/fstab  #   11 ,54   ,465   ,    

a、オプションパラメータ
-l:lines:行数のみ表示
-w:words:単語数を表示
-c:bytes:バイト数を表示
  2、cut
    cut OPTION... [FILE]...
a、オプション
-d CHAR:指定した文字を区切り
で、/etc/passwdファイルの最初のフィールドと7番目のフィールドのみを分割します.-d:または-d:
[root@node1 ~]# cut -d: -f1,7 /etc/passwd
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin
adm:/sbin/nologin
...

-f FIELDS:選択したフィールド:
#:指定した個々のフィールド
#-#:連続する複数のフィールド
#,#:個別の複数のフィールド
[root@node1 ~]# cut -d: -f1,3-5,7 /etc/passwd
[root@node1 ~]# wc -l /etc/rc.d/init.d/functions |cut -d " " -f1
691

  3、sort  
    sort [OPTION]... [FILE]...     sort [OPTION]... --files0-from=F
a、オプション
-n:文字ではなく数値サイズでソート
[root@node1 ~]# cut -d: -f3 /etc/passwd |sort -n 

-t CHAR:区切り記号の指定
-k#:比較をソートするフィールド
[root@node1 ~]# sort -t: -k 3 -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
...

-r:逆順序ソート
-f:文字大文字小文字は無視
-u:重複する行は1部のみ保持されます.
繰り返し行は連続して同じです
[root@node1 ~]# cut -d: -f7 /etc/passwd|sort -u
/bin/bash
/bin/csh
/bin/sh
/bin/sync
/bin/tcsh
/sbin/halt
/sbin/nologin
/sbin/shutdown
[root@node1 ~]# cut -d: -f7 /etc/passwd|sort -u|wc -l
8

4、uniq:つまりsort-uのu.重複するローをレポートまたは削除します.
      uniq [OPTION]... [INPUT [OUTPUT]]
a、該当パラメータ
-c:行ごとに繰り返される回数の統計
[root@node1 ~]# cut -d: -f7 /etc/passwd|sort |uniq -c
     11 /bin/bash
      2 /bin/csh
      1 /bin/sh
      1 /bin/sync
      1 /bin/tcsh
      1 /sbin/halt
     25 /sbin/nologin
      1 /sbin/shutdown

-u:重複行が存在しない行のみを表示
[root@node1 ~]# cut -d: -f7 /etc/passwd|sort |uniq -c
     11 /bin/bash
      2 /bin/csh
      1 /bin/sh
      1 /bin/sync
      1 /bin/tcsh
      1 /sbin/halt
     25 /sbin/nologin
      1 /sbin/shutdown
[root@node1 ~]# cut -d: -f7 /etc/passwd|sort |uniq -u
/bin/sh
/bin/sync
/bin/tcsh
/sbin/halt
/sbin/shutdown

-d:繰り返した行のみ表示
5、diff:二つのファイルの違いを比較する
    diff [OPTION]... FILES
    diff/PATH/TO/OLDFILE/PATH/TO/NEWFILE >/PATH/TO/PATCH_FILE
-u:unfiedメカニズムを使用すると、変更するコンテキストが表示され、デフォルトは3行です.
[root@node1 ~]# diff fstab fstab.new 
1c1  #   
<    #                    
---
> ### #                  # 
[root@node1 ~]# diff fstab fstab.new 
1,3c1  #1              
< wohaoshuai1
< wohaoshuai2
< wohaoshuai3
---
> ###
14d11   #14         
< wohaoshuai$

6、patch:diffの差異をパッチする
    patch [OPTIONS] -i/PATH/TO/PATCH_FILE/PATH/TO/OLDFILE
    patch/PATCH/TO/OLDFILE [root@node1 ~]# cat fstab wohaoshuai1 wohaoshuai2 wohaoshuai3 # # /etc/fstab # Created by anaconda on Tue Jun 4 22:30:32 2019 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=fd514a18-84be-4460-8130-706b3ec88673 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 wohaoshuai$
[root@node1 ~]# diff fstab fstab.new > fstab.patch #      fstab.patch
[root@node1 ~]# patch -i fstab.patch fstab  # fstab.patch      fstab  
patching file fstab
[root@node1 ~]# cat fstab #    fstab     fstab.new       
###
#
# /etc/fstab
# Created by anaconda on Tue Jun  4 22:30:32 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=fd514a18-84be-4460-8130-706b3ec88673 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@node1 ~]# cat fstab.new 
###
#
# /etc/fstab
# Created by anaconda on Tue Jun  4 22:30:32 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=fd514a18-84be-4460-8130-706b3ec88673 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

パッチを適用した後、ファイルが間違っていることに気づき、パッチを元に戻しました.
[root@node1 ~]# patch -R -i fstab.patch fstab
patching file fstab
[root@node1 ~]# cat fstab  #          
wohaoshuai1
wohaoshuai2
wohaoshuai3
#
# /etc/fstab
# Created by anaconda on Tue Jun  4 22:30:32 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=fd514a18-84be-4460-8130-706b3ec88673 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
wohaoshuai$

7、練習
(1)、ifconfig eno 1677777736コマンド結果のipアドレスを取り出す