シェルでのテキスト処理3人の剣士grep、sed、awk

grepコマンド

1.grep形式

   grep root passwad	          在passwd中过滤root
    
   grep ^root passwd	          过滤以root开头的信息
    
   grep root$ passwd	          过滤以root结尾的信息
    
   grep -i root passwd	          忽略大小写
    
   grep -E "\<root" passwd	      root字符之前不能有字符
    
   grep -E "root\>" passwd        root字符之后不能有字符
     
   grep -3 lebron passwd	      显示关键字与其前后三行
    
   grep -n lebron passwd 	      显示匹配行所在行号
    
   grep -A3 lebron passwd 	      显示匹配行以及下面3行
    
   grep -B3 lebron passwd	      显示匹配行以及上面3行
    
   grep -v	                      反向过滤

grep root passwd filter root inpasswd

grep -i root passwdフィルターroot in passwd(大文字と小文字を区別しない)
ここに写真の説明を挿入

grep -i ^ root passwd passwdのrootで始まる行をフィルタリングします(大文字と小文字は区別されません)

grep -i root $ passwdフィルター行がpasswdのrootで終わる(大文字と小文字を区別しない)

grep -iE“ ^ root | root $” passwdはrootで始まるか、rootで終わります

grep -iE "^ root | root $" passwd-vルートの最初または最後を削除します
ここに写真の説明を挿入

grep -iE "<root" passwdルートの前に文字がありません

grep -iE "root>" passwdrootの後に文字がありません

grep -iE "<root>" passwd rootには、前後の文字を含めることはできません

ここに写真の説明を挿入

grep -2 ROOT passwdは、キーワードの行とその前後の2行を表示します

grep -B2 ROOT passwdは、キーワードの行とその前の2行を表示します

grep -A2 ROOT passwdは、キーワードが配置されている行と次の2行を表示します

grep -n ROOT passwdは、キーワードの行とその行番号を表示します
ここに写真の説明を挿入

2.Grep文字番号マッチングルール

    w...s	        w开头,s结尾中间任意3个字符
     
    ....s	        s结尾前面任意4个字符
     
    "ws*"	        w、s出现任意次
     
    "ws?"	        w、s出现0-1次
     
    "ws+"	        w、s出现1-任意次
      
    "ws{5}"	        出现5次
     
    "ws{3,5}"	出现3-5次
     
    "ws{,5}"	出现0-5次
     
    "ws{0,5}"	出现0-5次
     
    "ws{2,}"	出现2-任意次
     
    "(ws){2}"	“ws”这个字符作为整体出现2次

grep -E "w ... s" westos

grep -E“…s” westos

grep -E "in ..." westos

ここに写真の説明を挿入

grep -E“ ws *” westos

grep -E「ws?」ウェストス

grep -E“ ws +” westos

ここに写真の説明を挿入

grep -E“ ws {4}” westos

grep -E“ ws {2,4}” westos

grep -E“ ws {、4}” westos

grep -E“ ws {3、}” westos

ここに写真の説明を挿入

grep -E“(gb){2}” westosgbは全体で2回表示されます

grep -E "(gb){、2}" westosgbは全体として最大2回表示されます

grep -E "w(gb){1,2} s" wとsgbの間のwestosは、全体として最大2回表示されます。
ここに写真の説明を挿入

sedコマンド

    p	        打印(需加 -n)
    d	        删除
    a	        追加
    i	        插入
    c	        更改/替换
    w	        写入
    r	        整合文件
    's/xx/xx/g'	字符替换
  1. pプリント

sed -n '3p'westosはwestosの3行目を表示します

sed -n '3,7p' westos display westos 3〜7行

sed -n '3p; 7p' westosは、westosの3行目と7行目の内容を表示します。

sed -n '$ p'westosはwestosの最後の行を表示します

ここに写真の説明を挿入

sed -n '/ ^ daddy / p'パパで始まるpasswd表示行

sed -n '/ bash $ / p'passwdは、bashで終わる行を表示します
ここに写真の説明を挿入

  1. d削除

sed '1,2d' westosはwestosの行1と2を削除し、表示します

sed '1d; 4d' westos westosの行1と4を削除し、表示します

sed '/ ^ p / d'westosは、westosのpで始まる行を削除して表示します

sed '/ g $ / d'westosは、westosのgで終わる行を削除して表示します

sed '/ g $ /!d' westosは、g以外の行を削除して表示します(前の手順の逆の操作)。

ここに写真の説明を挿入

  1. 追加

sed'aoligay 'westosは、westosの各行の後にoligayを追加します

sed '$ aoligay' westosは、westosの末尾にoligayを追加します

sed '1aoligay' westosは、westosの最初の行の後にoligayを追加します
ここに写真の説明を挿入

sed '/ gg / aoligay' westos / gg /は、この行の後に追加することを意味します

sed '/ pig / aoligay \ nbro' westos \ nはニューラインです
ここに写真の説明を挿入

  1. 挿入します
i与a的不同在于,a在指定行后追加,i在指定行前插入

sed '3i hhhhhh' westosは、westosの3行目の前にhhhhhを挿入します

sed '$ i hhhhhh' westosは、westosの終わりの前にhhhhhを挿入します

sed '/ pig / i hhhhhh' westoswestosの行/ pig /の前にhhhhhを挿入します

sed '/ pig / i hhhhhh \ ngg' westoswestosの行/ pig /の前にhhhhhggを挿入します
ここに写真の説明を挿入

  1. c変更

sed '$ c dsb'passwd最後の行をdsbに置き換えます

sed '/ bash $ / c dsb' passwdは、bashで終わる行をdsbに置き換えます。

sed '/ ^ lbj / c dsb' passwdは、lbjで始まる行をdsbに置き換えます。
ここに写真の説明を挿入

  1. w書き込み

sed '/ hey / w file' westos
ここに写真の説明を挿入

  1. r統合

sed '2r file' westosは、ファイルファイルの内容をwestosの2行目にマージします

sed '$ r file' westosは、ファイルファイルの内容をwestosの末尾にマージします
ここに写真の説明を挿入

  1. 交換

sed '1,3s / bash / dunk /' passwdpasswdの1行目と3行目のbashをdunkに置き換えます

sed's / lbj / kobe / g; s / bash / gkd / g'passwdpasswd内のすべてのlbjをkobeに置き換えます;すべてのbashをgkdに置き換えます

sed '/ westos /、/ zxn / s / bash / hhh / g'passwdpasswdのwestosとzxnの間のbashをhhhに置き換えます
ここに写真の説明を挿入

sed's /// @ / g'passwdはpasswdのすべての/を@に置き換えます

sed's @ / @:@ g'passwdは、区切り文字が@に変更されていることを除いて、前のコマンドと同じ効果があります。

ここに写真の説明を挿入

awkコマンド

    格式:
     
    awk  -F  分隔符  BEGIN{}{}END{}  filename
     
    NR	        行数
    NF	        每行的列数
    FILENAME	文件名称本身
    “westos”	字符串
    $1	        指定列数

awk -F: '{print NR}' passwdは、ファイルのすべての行を表示します

awk -F: '{print NF}' passwdは、ファイルの各行の列数を示します

awk -F: '{print $ 1}' passwdは、ファイルの最初の列の内容を表示します
ここに写真の説明を挿入

awk -F: '{print FILENAME}' passwdはファイル名を表示します(複数行ある場合、元のファイルは数回表示されます)

awk -F: '{print“ ohou”}' passwdは入力文字列を表示します(元のファイルには数行あり、数回表示されます)
ここに写真の説明を挿入

/bash$/	                  条件:以bash结尾
/条件1/ | | /条件2/	  条件1或条件2
/条件1/ && /条件2/	  条件1、2同时成立

awk -F: 'BEGIN {print“ name”} / bash $ / {print $ 1} END {print“ over”}' passwd

awk -F: 'BEGIN {print“ name”} / bash / ∣ ∣ / nologin / || / nologin/ / n o l o g i n / {print $ 1} END {print“ over”} 'passwd

awk -F: 'BEGIN {print“ name”} / bash $ / || / ^ root / {print $ 1} END {print“ over”}' passwd

awk -F: '$ 1〜 / root / {print $ 1}' passwd

awk -F: ' 7 / nologin 7〜 / nologin7 / n o l o g i n  / {print $ 1} 'passwd
ここに写真の説明を挿入

宿題

演習1:

システムで使用できるすべてのユーザー名を一覧表示します
ここに写真の説明を挿入

演習2:

スクリプトapache.shを作成して、このスクリプトの実行後にhttpdポートを変更して数値を入力できるようにします。
ここに写真の説明を挿入

演習3:

システム内のユーザーが使用でき、ホームディレクトリが/ homeにないユーザーの数を数えます
ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/qq_42958401/article/details/108255025