正規表現の基本的な知識については前のセクションで説明しました。正規表現の3つの主要なコマンドは、grep、sed、およびawkです。
1)grepは行情報をフィルタリングするために使用されます
機能:キーワードに一致する行を見つけて印刷します
パラメータ:-n一致する行と行番号を一緒に出力します; -v要件を満たさない行を印刷します(反転);-iは大文字と小文字を区別しません; -w完全な単語の行を印刷します;-要件を満たす印刷行と下のn行; -Bnは必要な行と上のn行を出力します; -Cnは必要な行と上と下のn行を印刷します。
[centos7 the root @〜] #grep -A2 / the passwd'halt '/ etc #次の2行を含む行を停止して出力
[root centos7 @〜] #grep -B2'halt' / etc / passwd #は停止ラインとその上の2行が出力され
ます。[root @ centos7〜]#grepを-C2'halt '/ etc / passwdファイル
#Output 停止し、上記と下記の2行を含む行[ルート@ centos7〜]# grepを-n 'root' / etc / passwd
# rootキーワードを使用して行と行番号をフィルターで除外[root @ centos7〜] #grep -v'nologin '/ etc / passwd# nologinを使用せずに行を
フィルター処理[root @ centos7〜 ] #grep '[0-9]' / etc / inittab
# 数字を含むすべての行を除外する[root @ centos7〜] #grep -v '[0-9]' / etc / inittab# 数字を含まないすべての行を除外する 行
[root @ centos7〜] #grep -v '^#'/ etc / inittab #non#
[root @ centos7〜]#grep'game $ '/ etc / inittabで
始まる 行を除外します#game [root @ centos7〜] #grep -v' ^# '/ etc / crontabで終わる行を除外 します| grep -v '^ $' #すべての空白行と#で始まる行を削除します
2)sedは、行テキストのフィルタリングと置換に使用されます
Sedは、テキストコンテンツを一度に1行ずつ処理するオンラインエディターです。処理するときは、現在処理中の行を一時バッファに保存し、sedコマンドを使用してバッファ内のコンテンツを処理し、処理後にバッファのコンテンツを画面に送信します。次に、次の行を処理し、ファイルの終わりまでこの方法を繰り返します。
役割:クエリをフィルタリングし、置換テキストのコンテンツを変更します
パラメータ:-n sedによって特別な処理が行われた行(またはアクション)のみが一覧表示されます。-eコマンドラインモードでsedアクションを直接編集します。-fファイルにsedアクションを直接書き込みます。- r sedのアクションは、拡張正規表記の構文をサポートします。-iは、端末に出力せずに、読み取られたファイルの内容を直接変更します。aの後に文字列が続くと、これらの文字列が新しい行(現在の次の行)に表示されます。cが置き換えられ、cの後に文字列が続くと、これらの文字列はn1とn2の間で置き換えられます。 dの行は削除されるため削除されるため、通常はdの後にコンテンツはありません。iは挿入および変更され、文字列はiの後に接続でき、これらの文字列は新しい行になります。pが出力され、特定の選択が行われます。 sのデータ出力; s置換および置換、直接置換; gすべてのコンテンツを選択します。
削除:dコマンド
[root @ centos7〜] #sed '2d' app.txt# ファイルの2行目を削除
[root @ centos7〜] #sed '2、$ d'app.txt# ファイルの2行目を削除して最後のすべての行
[root @ centos7〜]#sed '$ d'app.txt# ファイルの最後の行を削除します
[root @ centos7〜] #sed ' / test / 'd app.txt# テストと
置換 を含むすべての行を削除します:Sコマンド
[centos7ルート@〜]# セッド'S /試験/のProd / G' app.txt #ファイル全ての試験PRODを置き換え、その後、無置換のGの各列
#[〜@ centos7ルート] セッド- n's / ^ test / prod / p'app.txt #testで始まる行、testをprodに置き換え、出力
[root @ centos7〜] #sed -n's / \(love \)able / \ 1rs / p'app.txt#すべての 愛すべき人は恋人に置き換えられます
[root @ centos7〜] #sed 's#you#your#g'app.txt #「#」は、デフォルトの「/」ではなく、ここでの区切り文字です
選択した行範囲:comma
[root @ centos7〜] #sed -n '/ test /、/ chart / p'app.txt #testおよびcheartの範囲内のすべての行を出力
[root @ centos7〜] #sed -n '6、/ ^ test / p'app.txt# 6行目からtestで始まる行までのすべての行を出力します
[root @ centos7〜]#sed ' / test /、/ chart / s / $ / test /'app.txt# テストと西の間の線、最後にテストを追加
マルチポイント編集:eコマンド
[root @ centos7〜] #sed -e '1,5d' -e's / test / dev /'app.txt#1 行目から5行目を削除し、testをdevに置き換えます
ファイルから読み込みます
。rcommand[root @ centos7〜]#sed '/ test / r 1.txt' app.txt# テスト行を一致させ、1.txtの内容を行に挿入して、一緒に出力します。
ファイルの書き込み:wコマンド
[root @ centos7〜] #sed -n '/ test / w 1.txt ' app.txt#app.txtのテストを含むすべての行が1.txtに書き込まれます
コマンドの
追加:コマンド[root @ centos7〜]#sed '/ ^ test / a \\ ---> this is app.txt' app.txt << コンテンツはtestで始まる行の終わりに追加されます
変更を挿入:iコマンド
[root @ centos7〜] #sed '2i love you' app.txt
# 2行目にlove youを挿入[root @ centos7〜] #sed -i's / \ $ / \!/ g ' app.txt#行末 の$を!に置き換えます。
3)awkフィルター編集テキスト
Awkはsedのようなストリーミングエディタであり、ドキュメント内の行を操作し、テキストを1行ずつ処理します。Awkはsedよりも強力で、sedが実行できることを実行でき、さらに複雑な規則性も実行できます。
1awkコマンドフォーム
awk [-F | -f | -v] 'BEGIN {} // {command1; command2} END {}'ファイル
[-F | -f | -v]大きなパラメーター、-Fはセパレーターを指定します。 -fはスクリプトを呼び出し、-vは変数を定義しますvar = value
''#コードブロックを引用します
BEGIN #コードブロックを初期化し、主にグローバル変数を参照し、FSセパレータを設定します
//#一致するコードブロック。文字列または正規の式
{ }#1つ以上のコマンドを含むコマンドコードブロック
;#複数のコマンドはセミコロンで区切られます
END#主に最終計算または要約情報の出力のためにコードブロックを終了します
2特殊変数文字
$ 0#現在の行全体を
表します$ 1#各行の最初のフィールド
NF#フィールド数量変数
NR#各行のレコード番号、マルチファイルレコードの増分
FNR#NRと同様に、マルチファイルレコードは増分せず、各ファイルすべて1から始まります
\ t#タブ文字
\ n#新行文字
FS#開始時に区切り文字を定義します
RS#レコード区切り文字を入力します。デフォルトは新行文字です
〜#一致します
。==との正確な比較ではありません!〜#一致しません、不正確な比較
==#等しい、すべて等しくなければならない、正確な比較
!=#等しくない、正確な比較
&&#論理AND
||#論理OR
+#一致する場合、1つ以上を意味します
/ [0-9] [ 0-9] + /#2桁以上
/ [0-9] [0-9] * /#1桁以上
OFS#出力フィールドセパレータ、デフォルトはスペース
ORS#出力レコードセパレータ、デフォルトはnewlineです
-F '[:#/]'#3つのセパレータを定義します
3awkの例
=など。二重引用符で囲まれた数値を比較する場合、awkはそれを数値ではなく文字と見なします。二重引用符がない場合は、数値と見なされます。 [root @ centos7〜]#
awk -F ':' '$ 3 == "0"' / etc / passwd
# 3番目のフィールドの文字0と行を一致させます[root @ centos7〜] #awk -F ':' '$ 3> = 500' / etc / passwd
# 3番目のフィールドが数値500より大きい行に一致[root @ centos7〜] #awk -F ':' '$ 7!= "/ sbin / nologin"' / etc / passwd #7番目のフィールドに一致はnologinではありません行
[root @ centos7〜] #awk -F ':' '$ 3 <$ 4' / etc / passwd
# 2つのセグメント間の論理比較[root @ centos7〜] #awk -F ':' '$ 3> " 5 "&& $ 3 <" 7 "'/ etc / passwd
# 2つの一致条件を満たす行[root @ centos7〜] #awk -F': '' $ 3>" 5 "|| $ 7 ==" / bin /バッシュ」/ etc / passwd# 条件の1つを満たす行
一般的に使用される変数
NF:区切り文字で区切られた段落の数、NFの段落数、$ NFは最後の段落の値
NR:行番号行番号
[root @ centos7〜 ] #head -n3 / etc / passwd | awk -F ':' '{print NF}'
#段落の 総数を出力する[root @ centos7〜] #head -n3 / etc / passwd | awk -F ':' '{print $ NF}'
# 最後の段落の値を出力する[root @ centos7〜] #head -n3 / etc / passwd | awk -F ':' '{print NR}'
#出力 行番号[root @ centos7〜]#awk'NR > 20 '/ etc / passwd
# 行番号20を判定条件として使用[root @ centos7〜] # awkの-F ':' 'NR> 20 && $ 1~ / SSH /' / etc / passwdファイル #Outputの 最初の段落でのNR 20より大きく、sshで行が
計算フィールドの値を変更し
ます。[root @ centos7〜]#の ヘッド-N 3 / etc / passwd | awk -F ':' '$ 1 = "root"'
# 最初の3行の最初の段落がルート出力に変更されます[root @ centos7〜] #head -n2 / etc / passwd | awk -F ':' ' {$ 7 = $ 3 + $ 4;印刷$ 7} '
# フィールドを計算して値を割り当てる[root @ centos7〜] #awk -F ':' '{(t = t + $ 3)}; END {print t}' / etc / passwd #$ 3フィールドカウントと
[root @ centos7〜] #awk -F ':' '{if($ 1 == "root")print $ 0}' / etc / passwd #$ 1がルートである行を出力します
このセクションの内容はすべて基本です。上記のコマンド例は日常の使用に対応できます。より複雑で強力な機能が必要な場合は、コマンドツールの公式Webサイトを確認してください。特にawk、このコマンドツールを紹介するプロの本があります。スクリプトを作成するには、コマンドに精通していることが前提条件です。スクリプトを作成する前に、まず各コマンドの実行結果を把握し、判定ループステートメントに協力して、バッチの複雑な処理機能を実現する必要があります。