Linuxコマンド:grep awk sed詳細

3216 ワード

1、grep
grep [options] regex [file...]

regexは正規表現を指します
  • -i:大文字と小文字は無視されます.大文字と小文字は区別されません.-ignore-caseでも指定できます.
  • -v:一致しません.通常grepプログラムは、一致する項目を含むテキスト行を印刷します.このオプションによりgrepプログラムは、一致する項目を含まないテキスト行のみを印刷します.-invert-matchでも指定できます.
  • -c:テキスト行自体ではなく、一致する数(または一致しない数、-vオプションが指定されている場合)を印刷します.-countオプションで指定することもできます.
  • -l:テキスト行自体ではなく、一致する項目を含むファイル名を印刷します.-files-with-matchesオプションで指定できます.
  • -L:-lオプションと似ていますが、一致しないファイル名を印刷するだけです.-files-without-matchで指定することもできます.
  • -n:各一致行の前に、ファイル内にある対応する行番号を印刷します.-line-numberオプションも使用できます.
  • -h:マルチファイル検索に適用され、ファイル名は出力されません.-no-filenameオプションも使用できます.
  • -E:拡張正規表現
  • を使用
    例:
    #     bz   gz   zip        
    grep -Eh '^(bz|gz|zip)' dirlist*.txt
    
    #      bz       gz     zip     
    grep -Eh '^bz|gz|zip' dirlist*txt
    
    #    
    grep 'a' txt
    
    #     
    grep '[a-z]' txt
    grep '[A-Za-z0-9]' txt
    grep '[^0-9]' txt   ,         
    
    #    
    grep '.' passwd

    2、awk
    awk '   {  }'   
    awk '$9 == 500 {print $9, $7}' access.log

    awkの組み込み変数:
  • $0現在のレコード(この変数には行全体の内容が格納されている)
  • $1~n現在記録されているn番目のフィールドは、フィールド間がFSで区切る
  • である.
  • FS入力フィールド区切り文字のデフォルトはスペースまたはTab
  • です.
  • NF現在のレコードのフィールド数は、
  • のカラム数です.
  • NRで読み出したレコード数は、行番号であり、1から複数のファイルがあれば、この値もどんどん加算されます.
  • FNR現在のレコード数は、NRとは異なり、この値は各ファイル独自の行番号
  • になります.
  • RS入力レコード区切り記号、デフォルトは改行記号
  • OFS出力フィールド区切り記号、デフォルトもスペース
  • ORS出力のレコード区切り文字、デフォルトは改行文字
  • FILENAME現在入力されているファイルの名前
  • 例:
    #    :     
    awk -F ":" '{print $1, $3, $6}'  xx.txt
    
    #    ett.txt   (  100  )   20    30     
    awk ‘NR>19&&NR<31’ ett.txt
    awk ‘{ if (NR>19&&NR<31) print $0}’ ett.txt
    
    #   24      
    awk ‘NR==24 {print NR,$0}’ ett.txt
    
    # :    ,   5  s      
    awk -F ":" '$5~/^s/{print $0}' ett.txt
    
    # csv    2    300   ,       csv
    awk -F ',' '{L[NR]=$2}END{for(i=NR-299;i<=NR;i++){ sum+=L[i]};{print $0,sum/300}}' test.csv >> min.csv
    
    #          ,          
    awk '{if($3>a[$1]){a[$1]=$3;b[$1]=$0}}END{for(i in b) print b[i]}' ett.txt
    
    #            
    awk '{count[$1]++;  if($2>400)above400[$1]++} END{ for(i in count){print i, count[i],above400[i]/count[i]} }'  xxx.txt

    3、 sed
    sed [options] 'command' file(s)

    パラメータ:
    -n
    デフォルト出力をキャンセル
    -r
    拡張規則の使用
    -i
    ディスクにブラシをかける
    -e
    複数sed命令の実行
    -f
    命令をファイルに入れる
    sed置換タグ:
    表2 sed-command
    a
    追加
    i
    挿入
    d
    削除
    c
    指定した行を置換
    s
    行ごとに一致する最初の文字を置換
    g
    各行のすべてを置換
    w
    ファイルを保存
    e
    bashコマンドの実行
    q
    読み取りを続行しない
    p
    しゅつりょく
     
    例:
    # test.txt      
    sed "1 i This is a test file" test.txt
    
    #test.txt      
    sed "$ a This is the end of file" test.txt
    
    #  test.txt   
    sed "2d" test.txt
    
    #  test.txt       /fish  
    sed "/fish/d" test.txt
    
    # text.txt love   like
    sed "s/love/like/g" test.txt (/g      )
    
    #  test.txt  5-7 
    sed -n "5,7p" test.txt (-n         ,    -n    )