正規表現と→シェルプログラミング3人の剣士

では、正規表現とは何ですか?

正規表現の概念

grepコマンドの詳細な説明

Linuxの正規表現を詳しく説明します(基本正規表現+拡張正規表現)

  • 正規表現

これは、ファイルコンテンツのクエリ結果に影響を与える、記号と文字列による一致ルールです。

正規表現は、通常の文字とメタ文字で構成されます。
1.一般的な文字には、大文字と小文字、数字、句読点、その他の記号が含まれます。
2.メタ文字とは、正規表現で特別な意味を持つ特殊文字を指します。これを使用して、ターゲットオブジェクトの先頭文字(つまり、メタ文字の前の文字)の出現モードを指定できます。

一般的に使用される規則:grep、sed、awk、pgrep、mkdir、touch ...
touch a {1 ... 100} .txt

[root @ localhost〜] #ifconfig ens33 | grep "inet 192.168.6.20" | awk '{print $ 5}'
ブロードキャスト

  • grepを組み合わせた正規表現の使用法

(1)n:クエリが配置されているファイル内の指定された文字列の行番号を表示します

grep -n "ServerName" /usr/local/httpd/conf/httpd.conf 

(2)i:表示コンテンツでは大文字と小文字は区別されません

grep -in "ServerName" /usr/local/httpd/conf/httpd.conf 

(3)v:逆照会、指定された文字列を含まない行を表示する

grep -vn "ServerName" /usr/local/httpd/conf/httpd.conf 

(3)[]:[]内の任意の文字に一致する、または意味する

grep -in "Server[Nn][avty]me" /usr/local/httpd/conf/httpd.conf 
[root@localhost ~]# grep -n shu[twqwqn]do[abcde]n /etc/passwd
[root@localhost ~]# grep -n shu[twqwqn]do[abcdew]n /etc/passwd
7:shutdown:x :6:0:shutdown:/sbin:/sbin/shutdown

(4)^:指定された文字または文字列で開始

grep -n "^[Ss]" /usr/local/httpd/conf/httpd.conf 

(5)$:文字列の前に置きます。これは変数を呼び出すことを意味し、文字列は変数名です。文字列の終わりを示すために、文字列の後に配置します。

特別な使用法:$ abc {$は変数の呼び出しを意味します}

注:末尾が。の場合は、エスケープ文字を追加する必要があります。は正規表現のメタ文字でもあるため、特殊な意味を持つ文字を通常の文字に変換するには、エスケープ文字\を使用する必要があります。

grep -n "html$" /usr/local/httpd/conf/httpd.conf 
grep -n "\.$" /usr/local/httpd/conf/httpd.conf 
df | grep "/$"
cat httpd.conf | grep "\.$"
grep "com:80$" httpd.conf

(6)^ $:空白行を表示します

grep -n "^$" /usr/local/httpd/conf/httpd.conf 

(7)
[開始番号-終了番号]:指定された番号範囲[1-10]
[開始文字-終了文字]:指定された文字範囲[au]
grep -n "[AZ]" / Usr / local / httpd / conf / httpd.conf
[AZ]:連続した範囲の数字または英数字の
例:

[root@localhost ~]# grep -n ^[1..5] /etc/passwd           [*..*]这种写法是错误的
43:123:x:1000:1000:123:/home/123:/bin/bash
44:10
[root@localhost ~]# grep -n ^[1-30] /etc/passwd          正确写法
43:123:x:1000:1000:123:/home/123:/bin/bash
44:10
45:20
[root@localhost ~]# grep -n ^[1-10] /etc/passwd          特殊情况
43:123:x:1000:1000:123:/home/123:/bin/bash
44:10

  • 基本的な正規表現

(1)反転値

フォーマット1、

^[^] :取反值,不是以指定字母开头的字符串

查找“oo”前不是“w”的字符串
grep -n '[^w]oo' test.txt 

フォーマット2、

[^] : 取反值,查询出包含“除指定的字母或数字范围外”的字符串
[^a-z] [^A-Z] [^0-9]
grep "[^a-z]ork" httpd.conf

(2){}:指定された文字の繰り返し数、エスケープ文字を追加する必要がある{}は次のとおりです。\\ * \(\)\ $ \ /
指定された文字数{1、2}数:文字列In 、指定された文字「wo {2,5} rk」の
連続出現数の範囲指定された文字{ number1 }:文字列「wo {2」内の指定された文字の連続出現数の範囲を示します。 } rk "
例:

查询包含1-3个o的字符串
grep -n 'wo\{1,3\}d' test.txt 			o\{1,3\}
查询数量为2以上连续出现的字符串
grep -n 'o\{2\}' test.txt 			o\{2\}            oooo:这也是oo的双倍

(3)通常のワイルドカード:

.    	代替一个字符,可以连续使用,不能代表空值
*   	代替一组字符,可以为空
.*	    字符可有可无

grep'r ... o '/ etc / passwd
は、rとoの間に2文字あるかどうか照会し、スペースは1文字としてカウントされます。

grep -n'ooo * '/ etc / passwd.old 3
つ以上のoを

クエリしますクエリ「ooo *」では、ooのペアとして表示される必要があり、クエリ「ooo o *」では、次のように表示される必要があります。 oooペアで発生します。
「oo *」の場合、最初のoが存在する必要があり、2番目のoはゼロ以上であるため、o、oo、ooo、oooo、...が含まれ
ます。「ooo*」をクエリすると、3つ以上のoの文字列をクエリします。検索キーワードは2つです。oo、ooo、oooo、...が含まれてい
ます。「ooo o *」をクエリする場合は、3つ以上のoの文字列をクエリします。ooo、oooo、...が含まれています

grep -n '。*' / etc / passwd.oldが
すべて表示されます

  • 拡張正規表現

シェルでは、いくつかのより単純化された正規表現メタ文字が追加され、拡張正規表現をサポートするコマンドはごくわずかです。
使用されるコマンド:
grepコマンドは、基本的な正規表現のみをサポートします。拡張正規表現を使用する場合は、egrepまたはawkコマンドを使用する必要があります。

1)egrep -n'woo + d'test.txt# "wo {2、} rk"は "wo + rk"と書くことができます

+   :重复一个或者一个以上的前一个字符

2)egrep -n'o?oo'test.txt#指定されたファイルにooを含むクエリ文字列を表し、最初のoはオプションです

  :零个或者一个的前一个字符

3)egrep -n'o? ' test.txt

 查询没有或有一个以上o的字符串

4)egrep -n'oo? ' test.txt

查询一个或有一个以上o的字符串

5)egrep -n'ooo? ' test.txt

查询两个或有两个以上o的字符串

6)egrep -n'name | Name '/usr/local/httpd/conf/httpd.conf

查询文件中与指定字符串相同的内容

7)egrep -n't(a | e)st '/ usr / local / httpd / conf / httpd.conf(制限できるのは1文字のみ)

查询“组”字符串

8)egrep -n'A(xyz)+ C '/ usr / local / httpd / conf / httpd.conf

#查询开头的“A”结尾是“C”,中间有一个以上的“xyz”字符串的意思。(一个以上代表:xyzxyzxyz...)
辨别多个重复的组                          

上記の最後の3つは引用する必要があり、前のものを追加することも追加しないこともできます。

—————————————————————————————————————————————————— ———シェルプログラミングの3人の銃士:GREP SED AWKsedコマンドティーチングawkコマンドティーチング


[1] sedは、一度に1行のコンテンツを処理するオンラインエディターです。

Sedの主な機能:
1つ以上のファイルを自動的に編集するために使用さ
れます。ファイルに対する繰り返しの操作を簡素化します。
変換プログラムを作成します。
[デフォルトでは、すべてのsedコマンドはパターンスペースで実行されます(つまり、ソースファイルは変更されません)。したがって、リダイレクトを使用して出力を保存しない限り、入力ファイルは変更されません]

使用法:
2つの形式
sed [オプション] '操作'パラメーター
sed [オプション] -fスクリプトファイルパラメーター
[オプション]
一般的なsedには、主に次のコマンドオプションが含まれます:
-n、-quietまたはSilent:表示される処理結果のみ
-i:編集text content-
eまたは-expression =:指定されたコマンドまたはスクリプトを使用して入力テキストファイルを処理します
-fまたは-file =:指定されたスクリプトファイルを使用して入力テキストファイルを処理します
-hまたは-help:ヘルプを表示します

「操作」
「操作」は、ファイル操作のアクション動作、つまりsedコマンドを指定するために使用されます。通常、「[n1 [、n2]]」操作パラメータの形式が採用されます。n1とn2はオプションであり、存在しない場合があり、操作を選択するためのパラメーターを表します。
たとえば、5〜20行目で操作を実行する必要がある場合は、「5,20アクション動作」と表されます。
一般的な操作は次のとおり
です。a:追加、現在の行の下に指定されたコンテンツの行を追加します。
c:選択した行を指定した内容に置き換え、置き換えます
d:選択した行を削除、削除します
i:選択した行の上に指定した内容の行を挿入、挿入します
p:印刷、同時に行を指定した場合は、指定した行を印刷します。行を指定しない場合は、すべてのコンテンツが印刷されることを意味します。印刷されない文字がある場合、ASCIIコードで出力されます。通常、「-n」オプションとともに使用されます。
s:置換、指定された文字を置換
y:文字変換

パラメータ:操作のターゲットファイルを参照します。複数の操作オブジェクトがある場合、ファイルはコンマ「、」で区切られます。
また、scriptfileはスクリプトファイルを表し、オプション「-f」で指定する必要があります。スクリプトファイルがターゲットファイルの前に表示されている場合は、入力されたターゲットファイルが指定されたスクリプトファイルを介して処理されていることを意味します。

コマンドライン状態でファイルの内容を直接編集および表示できます

  • a:指定した行番号の後にコンテンツの行を追加します

sed -i '1a#chkconfig:35 25 25' / usr / local / httpd / conf / httpd.conf空のファイルにデータを追加できないことに注意してください。

sed -i '/#ServerName / a \ 192.168.100.100' /usr/local/httpd/conf/httpd.conf#ServerName
の次の行に192.168.100.100を追加します

  • p:条件を満たすテキストコンテンツを出力する

sed -n '90p' / usr / local / httpd / conf / httpd.conf
行90の内容を表示
sed-n '90、100p '/ usr / local / httpd / conf / httpd.conf行90
の内容を表示- 100
sed -n "95、+ 10p" /etc/httpd/conf/httpd.conf
は行番号
sed-n '$ =' / usr / local / httpd / conf / httpdから指定された行数の内容を読み取ります.conf
メインライン番号を表示

  • d:ファイル内の指定された行数を削除します

cp /usr/local/httpd/conf/httpd.conf /usr/local/httpd/conf/httpd.txt
head -16 /usr/local/httpd/conf/httpd.txt

指定された範囲の行を削除します
。sed-i“ 360,364d” /usr/local/httpd/conf/httpd.txt
sed -i“ 355、+ 10d” /usr/local/httpd/conf/httpd.txt

sed -i '/ apache / d ' / usr / local / httpd / conf / httpd.txt
指定された文字列の行を削除します
sed-i '/ apache /!d' /usr/local/httpd/conf/httpd.txt
指定された文字列を含まないすべての行を削除します
sed-i '/ ^#/ d' / usr / local / httpd / conf / httpd.txt #sed -i '/ ^ $ / d' / usrで
始まるすべての行削除します
/local/httpd/conf/httpd.txt
すべての空白行を削除します

  • s:指定されたファイルの内容を変更します(一般的に使用されます)

vimのA.TXTの
サーバー
サーバー
サーバー
aaabaaaa
dddkdda
のsed -iの/サーバー/ SERVER1 /」A.TXT
各行の最初の文字列を変更します

sed -i's / server / SERVER1 / 3'a.txtの
後の数字3は、各行の[同じ名前の文字列の数]を変更すること意味します

sed -i '/ server / c #haha' /a.txt
は、指定された文字列が配置されている行を置き換えます

行全体ではなく、指定された文字列のみを置き換えます。
sed -i's / server / SERVER / g '/ a.txtの後にgが続くと、全文を変更することを意味します

[2] awk:強力な編集ツール。入力テキストを1行ずつ読み取り、指定されたマッチングモード(通常は指定されたフィールドを表示するために使用)に従って検索します。

Sedのワークフロー

[1]区切り文字、デフォルトはスペース区切り文字です。ファイルの各行の最初のフィールドを分割します
awk-F: '{print $ 1}' / etc / passwd

awk '{print}' /a.txt = cat /a.txt
awk '{print $ 0}' /a.txt = cat /a.txtawkは$ 0を使用して行全体(レ​​コード)を表します

[2] 1行目から3行目の内容を出力します

awk 'NR==1,NR==3{
    
    print $0}' /a.txt 
awk '(NR>=1)&&(NR<=3){
    
    print}' /a.txt 

[3] 1行目と3行目の内容を出力します

 awk 'NR==1||NR==3{
    
    print}' /a.txt 

[4]
awk '(NR%2)== 0 {print}' / a.txtは
すべての偶数行を出力します

awk '(NR%2)== 1(print)' / a.txtは
すべての奇数行を出力します

awk '/ ^ root / {print}' / etc / passwd
はrootで始まる行を出力します

awk '/ nologin $ / {print}' / etc / passwdは
、nologinで終わる行を出力します

awk'BEGIN {X = 0}; // bin / bash $ / {x ++}; END {print x} '/ etc / passwd
は、bin / bashで終わる行数をカウントします

awkのワークフロー:
ここに画像の説明を挿入します

拡張:
awkにはいくつかの特別な組み込み変数が含まれています(直接使用できます)
FS:テキストの各行のフィールド区切り文字を指定します。デフォルトはスペースまたはタブストップです
。NF:
現在処理されている行のフィールド数NR:現在処理ラインのライン番号(序数)
の行全体の内容:$ 0
現在処理ラインのn番目のフィールド(n番目の列):現在処理ライン$ N
FILENAME:処理されたファイル名
RS:データレコード分離。デフォルトはn、つまり1行に1レコード
-F:区切り文字として:を指定し、デフォルトはスペース区切りです。
一緒に頑張ってみましょう。
ここに画像の説明を挿入します
LAMP動的ウェブサイトプラットフォーム

おすすめ

転載: blog.csdn.net/qq_50573146/article/details/110893766