grepの紹介
- grepは、Linuxで最も一般的に使用されるテキスト処理ツールの1つです。
- sed awkと一緒に、彼らはLinuxでは3つの銃士と呼ばれています!
- grepは、ウィンドウでtxtファイルを開き、ショートカットキー「Ctrl + F」を使用してテキスト内の文字列を検索するようなものです。grepは文字検索ツールとして理解できます。
- grepのフルネームはグローバル検索の正規表現であり、行を印刷します。これはグローバル検索を意味します。
grepの基本的な使用法
# grep [选项] 正则表达式 [目标文件]
grep [OPTIONS] PATTERN [FILE...]
# grep [选项] -e 正则表表达式 或 -f 包含正则表表?
共通のパラメーター
-
-v:逆検索、一致するパターンのない行を表示
-
-n:マッチング結果の行番号を表示します
-
-i:検索時に大文字と小文字を区別しない
-
-o:修飾された文字列のみを表示します
-
-e:論理または関係の複数のオプションのマッチングを実現します
-
-E:拡張正規表現を使用します。「-E」オプションを使用する場合は、egrepを使用するのと同じです。
-
-w:完全一致キーワード
-
-c:一致した行の数をカウントします。一致した行の総数であることに注意してください
-
-q:クワイエットモード、情報を出力しません
-
-l:出力マッチング結果を表示せず、マッチングファイル名のみを表示します
-
-A <表示行数>または--after-context = <表示行数>:テンプレートスタイルに準拠した列の表示に加えて、行後のコンテンツが表示されます。
-
bまたは--byte-offset:パターンに一致する行を表示する前に、行の最初の文字の番号をマークします。
sedの紹介
ストリームエディタ。主にテキストコンテンツのフィルタリングと置換に使用されます
動作原理:
- Sedはストリームエディタであり、ユーザーが操作することはできません。Sedは、テキストコンテンツを行単位で処理します。行がメモリに読み込まれるたびに、パターンスペースと呼ばれます。
- 元のファイルはデフォルトでは変更されません。変更する必要がある場合は、-iパラメーターを追加する必要があります。
- Sedにはモードスペースとホールドスペース(ホールドスペース)があり、モードスペースのコンテンツはデフォルトで標準出力に出力されます
- sedが各行を読み取ると、コンテンツがメモリに保存されます
- -yオプションを除き、正規および拡張正規式をサポートします
sedの基本的な使い方
sed [选项] '定址和命令' 处理的文件
一般的に使用されるオプション
- -i:直接変更
- -n:デフォルトの出力をキャンセルします
一般的に使用されるパラメーター
-
p:印刷
-
d:削除
-
s:置換(文字列が置換されます)g:グローバルパターン、一致したすべての文字列が置換されます(gがない場合、デフォルトでは最初の一致する行のみが置換されます)
-
y:文字を変更する(1対1の対応)
-
i:挿入(一致する行の前)
-
a:追加(行を一致させた後)
-
c:変更(一致した行全体が変更されます)
-
r:ファイルから読み取る
-
w:ファイルを書き込む
-
q:最初の一致を見つけて終了します
awkの紹介
-
Awkは優れたテキスト処理ツールです。(この名前は、創設者のAlfred Aihou、Peter Weinberg、Brian Colinhamの姓の最初の文字に由来しています)
-
このパターンは、AWKがデータで探しているものを表し、アクションは、一致するコンテンツが見つかったときに実行される一連のコマンドです。
awkの基本的な使用法
-Fは区切り文字をコロンとして指定します
構文形式:
awk -F '分隔符' '/模式/{操作}' 文件名
awk組み込み変数
属性 说明
$0 当前记录(作为单个变量)
$1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符 默认是空格
NF 当前记录中的字段个数,就是有多少列
NR 已经读出的记录数,就是行号,从1开始
RS 输入的记录他隔符默 认为换行符
OFS 输出字段分隔符 默认也是空格
ORS 输出的记录分隔符,默认为换行符
ARGC 命令行参数个数
ARGV 命令行参数数组
FILENAME 当前输入文件的名字
IGNORECASE 如果为真,则进行忽略大小写的匹配
ARGIND 当前被处理文件的ARGV标志符
CONVFMT 数字转换格式 %.6g
ENVIRON UNIX环境变量
ERRNO UNIX系统错误消息
FIELDWIDTHS 输入字段宽度的空白分隔字符串
FNR 当前记录数
OFMT 数字的输出格式 %.6g
RSTART 被匹配函数匹配的字符串首
RLENGTH 被匹配函数匹配的字符串长度
awk一般的に使用される変数
- NF:最後のフィールドを表します
[root@localhost ~]# awk -F ':' '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
- $(NF-1):最後から2番目のフィールドを示します
[root@localhost ~]# awk -F ':' '{print $(NF-1)}' /etc/passwd
/root
/bin
/sbin
/var/adm
/var/spool/lpd
- NR:現在処理されている行を示します
2行目を出力
[root@localhost ~]# awk -F ":" 'NR==2 {print}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
3行後
[root@localhost ~]# awk -F ':' 'NR>3 {print}' /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
awk組み込み関数
- toupper()は、文字を大文字に変換するために使用されます[t ^ ber]
[root@localhost ~]# awk -F ':' '{print toupper($1)}' /etc/passwd
ROOT
BIN
DAEMON
ADM
LP
- tolower()は、文字列を小文字に変換するために使用されます
[root@localhost ~]# awk '{print tolower($1)}' /tmp/aa.txt
root
bin
daemon
adm
awk ifelseステートメント
- $ 1 == rootの場合は最初のフィールドを印刷し、そうでない場合は2番目のフィールドを印刷します
root@localhost ~]# awk -F : '{if ($1=="root") print $1;else print $2}' /etc/passwd
root
x
x
x
x
awkの高度な使用法BEGINEND
awk '
BEGIN { actions }
/pattern/ { actions }
/pattern/ { actions }
……….
END { actions }
' filenames
- BEGINモード:awkが入力行を読み取る直前にBEGINで指定されたアクションを実行することを意味します。
- ENDモード:awkが正式に終了する前にENDで指定されたアクションを実行することを意味します