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つの実装方法があります
(2)、現在のシステム上のroot、centosまたはuser 1ユーザに関する情報を表示する
(3)、/etc/rcを探し出す.d/init.d/functionsファイルの単語の後ろに括弧の行が付いている
(4)、echoコマンドを使用して絶対パスを出力し、egrepを使用してベース名を取り出す
さらに、パス名を取り出します.dirnameコマンドを実行した結果と同様
(5)、ifconfigコマンド結果の1-255間の数値を探し出す
(6)、課外作業:ifconfig命令結果中のIPアドレスを探し出す
(7)、ユーザーbash、testbash、basherおよびnologin(shellは/sbin/nologin)を追加する.その後、/etc/passwdファイルのユーザー名とshell名の行を見つけます.
二、fgrep:正規表現メタ文字はサポートされていません
1、メタ文字でモードを書く必要がない場合、fgrepを使うほうが性能が良い
三、テキスト表示及び処理ツール
1、wc:word count
wc [OPTION]... [FILE]... wc [OPTION]... --files0-from=F
a、オプションパラメータ
-l:lines:行数のみ表示
-w:words:単語数を表示
-c:bytes:バイト数を表示
2、cut
cut OPTION... [FILE]...
a、オプション
-d CHAR:指定した文字を区切り
で、/etc/passwdファイルの最初のフィールドと7番目のフィールドのみを分割します.-d:または-d:
-f FIELDS:選択したフィールド:
#:指定した個々のフィールド
#-#:連続する複数のフィールド
#,#:個別の複数のフィールド
3、sort
sort [OPTION]... [FILE]... sort [OPTION]... --files0-from=F
a、オプション
-n:文字ではなく数値サイズでソート
-t CHAR:区切り記号の指定
-k#:比較をソートするフィールド
-r:逆順序ソート
-f:文字大文字小文字は無視
-u:重複する行は1部のみ保持されます.
繰り返し行は連続して同じです
4、uniq:つまりsort-uのu.重複するローをレポートまたは削除します.
uniq [OPTION]... [INPUT [OUTPUT]]
a、該当パラメータ
-c:行ごとに繰り返される回数の統計
-u:重複行が存在しない行のみを表示
-d:繰り返した行のみ表示
5、diff:二つのファイルの違いを比較する
diff [OPTION]... FILES
diff/PATH/TO/OLDFILE/PATH/TO/NEWFILE >/PATH/TO/PATCH_FILE
-u:unfiedメカニズムを使用すると、変更するコンテキストが表示され、デフォルトは3行です.
6、patch:diffの差異をパッチする
patch [OPTIONS] -i/PATH/TO/PATCH_FILE/PATH/TO/OLDFILE
patch/PATCH/TO/OLDFILE
パッチを適用した後、ファイルが間違っていることに気づき、パッチを元に戻しました.
7、練習
(1)、ifconfig eno 1677777736コマンド結果のipアドレスを取り出す
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アドレスを取り出す