Linuxの三銃士のgrep、sedは、awkを使用してプレゼンテーション

Linuxは三銃士(grepを、セッド、awkの)運用・保守の効率を向上させることができ、これらの3つのツールの3つの短い、巧み使用することです。正規表現の基礎としてのLinuxと三銃士、Linuxシステムながら、2つの正規表現をサポートしていますが、「標準正規表現」と「拡張正規表現。」正規表現を習得した後、私は三銃士の特定の使用について説明します。

まず、正規表現

正则表达式:REGular EXPression, REGEXP
元字符:
.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
 字符集合:[:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:]
    注意:字符集合要用[ ]包含

匹配次数(贪婪模式):
*: 匹配其前面的字符任意次 
 a, b, ab, aab, acb, adb, amnb
 a*b, a?b
 a.*b

 .*: 任意长度的任意字符
\?: 匹配其前面的字符1次或0次
\+:匹配至少一次
\{m,n\}:匹配其前面的字符至少m次,至多n次
 \{1,\}
 \{0,3\}
    备注:至少0次,必须要显示的写出来。

位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首
$: 锚定行尾,此字符前面的任意内容必须出现在行尾
^$: 空白行

\<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b: 锚定词尾,其前面的任意字符必须作为单词的尾部出现

分组:
\(\)
 \(ab\)*
 后向引用
 \1: 引用第一个左括号以及与之对应的右括号所包括的所有内容
 \2:
 \3:

あなたは、標準正規表現を使用するプロセスを見ることができ、多くのシンボルは、このように正規表現が登場し拡大し、仕事でいくつかの不便をもたらした、エスケープする必要があります。

第二に、正規表現を拡大します

1. 字符匹配:
.
[abc]:包含abc任意一个字符
[^abc]:不包含abc任意一个字符

2. 次数匹配(不用再转义):
*: 
?:
+: 匹配其前面的字符至少1次
{m,n}

3. 位置锚定:
^
$
\<
\>

4. 分组(不用再转义):
():分组
\1, \2, \3, ...

5. 或者
|: or
C|cat: C或cat(表示的是整个部分)

見ることができ、拡張正規表現の使用は、SEDの文を書くときに大幅にコードの可読性を向上させ、特にあるエスケープ記号の多くを省略することができます。これは、優先順位の使用は正規表現を拡張することをお勧めします。

三、grepコマンドの家族

関連3.1。grepコマンド

家族は、grepコマンドのgrepを、egrepの、fgrepが異なるシナリオに適用されている3つのサブコマンドが構成されています。:次のように
コマンド説明
grepのネイティブgrepコマンド、マッチングの基準として「標準正規表現」を使用しました。
一致条件として、「拡張正規表現」を使用して、$(はgrepの-E)と同等の拡張grepコマンドを、egrepを。
grepコマンドの簡易版は、正規表現をサポートしていませんFGREPが、高速検索スピード、低システムリソースの使用状況。

3.2使い方

構文
はgrep [オプション] PATTERN [FILE ...]
[オプション]セクション
-i:大文字小文字を無視
一致する文字列の強調表示:--color
-vを:表示パターンは、ラインに一致しない
-o:のみパターンマッチングを示し、文字列
-E:拡張正規表現の使用
パターン部を
所定のテンプレート文字列と一致するように、文字列が使用されてもよく、通常の正規表現(標準&拡張)。
FILEの一部
のファイルの内容を見つける必要があります。

四、sedコマンド

4.1概要

エディタストリームされるSED名前
のsedはストリームエディタ、ラインエディタです

4.2基本的な構文

sedの[オプション]「スクリプト」[INPUTファイル] ...
オプションセクション
-n:出力しないパターンスペースの内容を標準出力
-e:ソーススクリプトの複数のsedコマンドを指定することができ、マルチ編集
-f:入力sedスクリプトは、スクリプトは編集コマンドを読み込む
:-r 拡張正規の使用をサポート
-iを:直接ソースファイルを編集します

スクリプト部分の
アドレスは、編集コマンドの区切り(とVimは同様の命令)
1)ヌルアドレス:フルテキスト編集
2)シングルアドレス:
  #:行を指定し、特定の行編集
  /パターン/を:行にパターンマッチングを指定
)3住所範囲:
  #、#
  #、#+
  #、/パターン/
  / PATTERN1 /、/パターン2/
4)ステッピングアドレス:
  1〜2:スタートラインに1、次にマッチプログレッシブライン2ダウン
  2〜2:すべての偶数行は
5)編集コマンド:
  D:行全体を削除し、最後にD
  P:パターンスペースの内容を表示し、最終的にに配置された
  :行の\を使ってマッチングn個の追加は、複数の回線をサポートした後にテキストを追加します。区切りの背後に配置され
  たテキストが前にコメントを追加しました:i。例:セッド「こんにちは3iの」XXX
  C:交換用の動作指定したテキスト。例:「3Cテキスト」のsedは、テキストを置き換えるために、第三の行ますxxx。-iセッド「/ XYZ / CのHelloWorld」num.txtの
  W:指定された場所に一致するコンテンツ記憶スペースパターン。例: '/ ^ [^ -n sedの #]を/ tmp /デモ/ W'の/ etc / fstabファイルは/ etc / fstabに行#アフリカの/ tmp /デモの先頭に保存されました。
  R:ファイルに指定されたファイルの内容を読み出すことは戻って現在の行にマッチし、ファイルをマージします。
  !:条件は否定しました。使用方法:区切り編集コマンドアドレス!
  S ///:条件の交換。
あるいはマーク備考:G(全体的な置換)、P(成功別の表示ライン)

例を交換してください:入力ルックアップディレクトリに応じて
エコー"は/ var / log / messagesに " | sedののの@ [^ /] + $ / @@?」

4.3.sed高度な使い方

  1. モデル空間と空間を維持

パターンスペースでは、マッチングが完了しています。が一致しない場合は、テキストコンテンツのラインは、デフォルトの出力をstdoutになります。テキストの行の試合は、編集コマンドを実行しますと、出力stdoutに結果。
唯一の追加アクションの完了のため、一時記憶領域として理解することができるスペースを確保してください。

  1. パラメータ
    H:保持空間にパターンスペースカバーの内容;
    H:;パターンスペースの内容は保持空間に追加される
    :保持空間の内容がパターンスペースに重ねて; G
    G:保持空間パターンスペースに追加概要;
    X:スワップ領域の内容を保持するパターンスペースの内容;
    N-:パターンスペースに次の行(変化点)に一致するカバーを読み取る;
    N:追加の読み取りパターンの空間にマッチライン(変化点)の次のライン;
    D:ラインパターンのスペースを削除し、
    D:パターン・スペース内のすべての行複数の行を削除します。
3. 举例
sed -n 'n;p' FILE:显示偶数行;
sed '1!G;h;$!d' FILE:逆序显示文件的内容;
sed '$!d' FILE:取出最后一行;
sed '\$!N;$!D' FILE:取出文件后两行;
sed '/^$/d;G' FILE:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行;
sed 'n;d' FILE:显示奇数行;
sed 'G' FILE:在原有的每行后方添加一个空白行;
  • 例:文字列を抽出
/bin/bash
info="hellozimskyshenzhen"
echo $info | sed 's/hello\(\w\+\)shenzhen/\1/g'

備考:

  • sedのデジタル[0-9]を使用した場合、\ Dをサポートしますが、\ワットをサポートしていません。
  • エスケープする数未満>大きい<、+逃れるために、脱出する()内のsed。
  • 例:指定された書式文字列が存在するかどうかを決定します
#!/bin/bash
# 判断输入是否为整数
if [ -n "$(echo $1 | sed -n '/^[0-9]\+$/p')" ] ; then
  echo 'yes'
else
  echo 'no'
fi

五、awkコマンド

5.1。Awkの概要

awkの発明は、発電機の出力をフォーマットするために使用されているレポートツール3つの短い、AWKの名前の最初の文字です。書式付きテキスト出力デバイス。

5.2基本的な使い方

1.構文
のgawk [オプション]「プログラム」FILE
前記プログラム:パターンは、{}アクション文
{}演算指示コマンドとして理解することができる、最も一般的に使用されるプリント、printfの

原稿を読み取る2. AWKプロセス
入力に応じてセパレータの小さな部分に切断文書を読み取るためのラインに応じて、アクション文で処理し、(組み込み変数とは、$ 2 $ 0 $ 1 ...表されます)。$ 0行全体を表します。

オプション3.オプション
-F:名入力フィールド区切り文字;
-v:カスタム変数var =値を実装するために使用されます。

(区切り用)4. PATTERN
 空:各ラインは、文書処理表し
 治療の定期的な必要用いたラインマッチング:/パターン/
 上方アンチテイク:! /パターン/
 関係式:trueまたはfalseの結果は、処理結果が真であります、偽のない治療。非ゼロの非空の文字列は、他の偽真です。
 区切り線:フォーマットを直接数(1、2 {...})を得るサポートされていません。例えば、参照してください。
 / ENDモードをBEGIN:BEGIN {}、印刷ヘッダとして、テキストファイルの処理プログラムの開始前に一度だけ実行表します。END {}は、一度実行例えば、処理後の要約テキストデータが完了する表します。

举例:
awk -F: '$NF=="/bin/bash" {print $1, $NF}' /etc/passwd
awk -F: '$NF!"/bash/$"{print $1,$NF}' passwd
awk -F: '$3<1000 {print $1, $3}' /etc/passwd
awk -F; '(NR>=2&&NR<=10){print $1}' /etc/passwd 行定界
awk -F: '{printf "%-15s %10s\n", $1, $2}' /etc/passwd

5.変数

  • 組み込み変数(あなたの変数を参照するとき、プラス$)
    FS:フィールドは、INPUTセパレーター:入力フィールドセパレータは、空白文字をデフォルト。-vが指定されています。
    OFS:出力フィールドセパレータ。-vが指定されています。
    RS:改行入力
    ORS:改行出力
    NFのフィールドの数の各行のフィールドの数:。プラス$ NFは最後のものです
    NR:記録ファイルの行数、印刷行番号をプリントアウトがある
    FNR:複数のファイルの行数がカウントされている
    ファイル名を:現在のファイルのファイル名
    ARGC:コマンドライン引数のパラメータの数は
    ARGV:コマンドの配列を返します。各パラメータ行
    の例は:AWK '{印刷ARGV [BEGINの/ etc / fstabには/ etc /問題0]}
    ここでARGV [0]であるAWK、最初の引数0で固定しました。ARGV [1]の/ etc / fstabにある、ARGV [2 ] の/ etc /問題のある
    例:AWK -v FS = ':' '' -v OFS = '{$ 1印刷}' / etc / passwdファイル入力結腸と命名区切り文字。awkの-F付:...

  • カスタム変数
    1つの方法:-v VAR =値(文字の大文字と小文字の区別)
    方法2:プログラムの定義で

    举例:AWK -vテスト= 'こんにちは' 'BEGIN {印刷試験}'
    AWKは'{テストは='こんにちは」印刷試験} BEGIN

6. ACTION一般的に使用されるコマンド

  • プリント
    出力フォーマット:印刷ITEM1、ITEM2は...
    注意:区切り文字として使用し、コンマを、出力項目は、組み込み変数、文字列、awkの式を使用できます。項目が省略されている場合は、行全体を$ 0が表示されます。

  • printfの
    フォーマットされた出力:printfのフォーマット、ITEM1、ITEM2 ...ビットのフォーマットに。
    注意:フォーマットを指定する必要があります。ラップするには、ディスプレイを書くことでなければならず、文字の書式に必要な形式で指定された各項目の後ろに。
  • 制御文:控制语句場合は、しばらく
    IF(条件){文の}
    IF(条件){文の}他{文}
    (条件){文は}ながら
    {文}しばらく(条件)を行う
    ために(ただし、expr1、expr2の; expr3は){文}
    ブレークは
    引き続き
    配列[インデックス]削除
    アレイを削除删除整个数组
    の出口を退出语句
  • 複合文:文の組み合わせ
  • 入力文:入力声明
  • 出力文:文出力
    指定子:%の
     C:文字のASCII値を表示
     %dを10進整数表示
     %Eを:数値表示科学的表記法
     %F:浮動として示さ
     科学的表記示すフロート:%gの
     %S:表示文字列
     %U:符号なし整数表示
     %%:%の自体を表示
    修飾子:#1
     [#]:文字の幅を制御するための第1のデジタル表示、2番目の数字は(浮動小数点とするための小数精度を表します導入);デフォルト出力右アライメント%の15Sは、左:% - 15Sと、+:プラスとマイナス記号を示し、
    演算子
     算術演算子:+ - / *;数値文字列にX +; -X-に陰性;
     ストリング演算子:文字列連結(NOオペレータ)
     代入演算子:=、+ =、 - =、/ =、+、 -
     比較演算子:>、<、<=、= ,! =
    パターンマッチ
     〜:文字列マッチングモードかどうかを左
     〜:!文字列のパターンマッチングがままにすることはできませんかどうかを
    論理演算子
     &&:と
     ||:または
     :!以外
    の関数呼び出し
     FUNCTION_NAME(引数1、 ARG2、...)
    の条件式
     セレクタtrue_exp :? false_expと三項演算子として

  • 操作例
# 一般来说, 打印无状态内容放在BEGIN和END块中
awk -v begin="hello" -v end="ok" -F: 'BEGIN{print begin}; {print $1, $NF}; END{print end}' /etc/passwd
5.3。Awkの高度な使用方法および使用例

一般的なawkは組み込み変数


$1:表示第一列

$NF:表示最后一列

$NR:表示行号

一般的な条件は示しています

1)/ /コンテンツを特定します

$#条件で持ち込まアイテムを追加していないあなたは、「指定されたコンテンツ」を含む行に一致させることができますこの方法は、それが定期的に使用しないことをお勧めし、例外があります。


awk -F: '/nologin/{print $0}' /etc/passwd #匹配到含有nologin关键字的行

seq 100 | awk '/1/{print $1}'

/指定された2)$#= /コンテンツ

このように、指定されたコンテンツ#に一致する最初の列を指定


awk -F: '$1=/bin/{print $0}' /etc/passwd

3)$#〜/指定されたコンテンツ/

このように指定された列(正規一致)するためのファジーマッチは、コンテンツを指定して、行を取得します。


awk -F: '$1~/dae/{print $1}' /etc/passwd  #正向选择

awk -F: '$1!~/dae/{print $1}' /etc/passwd #反向选择

4)の値を決定します

>、<、> =、<=、== ,! =指定されたカラムの値を決定するために使用。


awk -F: '$3>=10{print $1}' /etc/passwd

5)決意ロジック

論理的な判断に||、&&使用してください。


awk -F: '$3>=5 && $3<=10{print $1}' /etc/passwd

6)の条件が判定された場合


awk -F: '{if ($NF~/nologin$/){i++}else{j++}}; END{print i, j}' /etc/passwd

#注意if-else条件判断是放在{}中的

7)辞書使用

あなたは統計のために、AWKに配列型を定義することができます。


awk '{ip[$1]++}; END{for (i in ip) {print i, ip[i]}}' access.log

#解析: 将第一列ip设置为字典的key,当出现一次相同的ip时自增1,用于统计所有的ip计数。

#for循环中取到每个字典对应的key,再使用print块打印出来。注意花括号的隔离。

#QQ号 等级  时长

#统计等级(30<=x<=90),相同账号的时长

#1234 12 23

#1234 10 122

#1233 92 4212

#1233 42 4252

#1239 87 2313

#1233 56 1121

#1231 19 45

#1235 45 679

cat data | awk '$2>=30&&$2<=90{dic[$1]+=$3}; END{for (i in dic) {print i, dic[i]}}'

おすすめ

転載: www.linuxidc.com/Linux/2019-10/160947.htm