正規表現・テキスト処理の用語集(34語)
正規表現・テキスト処理に関する Linux 用語を、読み・意味・補足つきでまとめました。
1行野郎いちぎょうやろう
パイプやコマンド1行だけで、まとまった処理を済ませてしまう短いコマンドの俗称。
英語のone-linerに由来し、awkやsedを使って集計・整形・抽出を1つのコマンドラインで完結させたものを指す。専用のスクリプトを書かずに済む手軽さと、書けた瞬間の達成感が魅力とされる。
awkおーく
行を列(フィールド)に分けて処理するテキスト処理言語。
$1 $2 で列、NF で列数、NR で行番号を参照。集計や条件抽出が得意。
awkおーく
行を空白区切りの列として扱い、抽出や集計ができるテキスト処理言語。
$1が1列目、$2が2列目のように列単位で扱えるのが最大の特徴で、ログやCSVから特定列を取り出す作業に強い。パターンと処理を組み合わせた小さなプログラムを書け、合計や平均などの集計も1行で済ませられる。
BREびーあーるいー
grepなどが既定で使う基本正規表現。+や?をそのまま使えない方式。
基本正規表現(Basic Regular Expression)の略。+ ? | { }を特別扱いせず、メタ文字として使うには\+のようにエスケープが要る。同じパターンでもgrepとgrep -Eで挙動が変わる原因であり、EREとの違いとして押さえたい。
ENDブロックえんどぶろっく
awkで全ての行を読み終えた後に一度だけ実行されるアクション。END{...}と書く。
パターン{アクション}が行ごとに毎回実行されるのに対し、END{アクション}は入力の終わりに達したときに1回だけ実行される。合計や平均の算出、連想配列の集計結果をまとめて出力する場面でよく使われる。
EREいーあーるいー
+や?、|をそのまま使える拡張正規表現。grep -Eで有効になる方式。
拡張正規表現(Extended Regular Expression)の略で、BREではエスケープが必要だった記号を直接書ける。egrepやawkは標準でこの方式を使う。ネット上の解説の多くはERE前提なので、grepで動かないときはまず-Eを疑うとよい。
PCREぴーしーあーるいー
Perl由来の高機能な正規表現方式。\dなどの短縮記法が使える。
Perl互換正規表現の略で、\d(数字)や\w(単語構成文字)、先読みなどの強力な機能を持つ。grep -Pで利用でき、多くのプログラミング言語の正規表現もこの系統。BRE/EREとの記法差が混乱のもとになりやすい。
sedせど
1行ずつ加工するストリームエディタ。置換 s/// が代表的。
stream editor の略。-i でファイルを直接書き換え、d で行削除もできる。
sedせど
テキストを行ごとに加工するコマンド。s/前/後/の置換が代表的な使い方。
ストリームエディタの略で、エディタを開かずコマンドラインだけで置換・削除・抽出ができる。sed 's/old/new/g'の形が最頻出。標準では結果を表示するだけで、元ファイルを書き換えるには-iオプションを使う。
sedスクリプトせどすくりぷと
sed に渡す一連の命令のまとまり。-e オプションを重ねるか、; で区切って複数の処理を1回の実行でつなげる。
sed -e '1d' -e 's/a/b/' のように -e を複数回書く方法と、sed '1d; s/a/b/' のようにセミコロンで区切って1つの引用符にまとめる方法があり、どちらも上から順に処理が適用される。処理の順番によって結果が変わることがあるため、意図した順に並べる。
アンカーあんかー
位置を指定するメタ文字。^ は行頭、$ は行末を表す。
文字そのものではなく「行の先頭・末尾」という場所にマッチする。
アンカーあんかー
^や$のように、行頭・行末といった「位置」を指定するメタ文字。
^errorなら行頭にあるerror、error$なら行末のerrorだけに一致する。文字には一致せず位置だけを固定するのが特徴。grepで行全体の完全一致を探す^パターン$の形は定番のイディオム。
グループ化ぐるーぷか
かっこで正規表現の一部をひとまとめにし、量指定子をまとめて効かせたり後から取り出したりできるようにすること。
ERE では ( ) 、BRE では \( \) で囲むと、その内側が1つのまとまり(グループ)として扱われる。(ab)+ のようにまとまり全体へ量指定子をかけられるほか、| と組み合わせて選択肢の範囲を区切ったり、マッチした文字列を番号付きで後から呼び出す土台にもなる。BREとEREでかっこの記法が入れ替わる点は混同しやすいので注意したい。
グロブぐろぶ
*.txtのようにシェルがファイル名を照合するパターン。正規表現とは別物。
*は任意の文字列、?は任意の1文字を表し、シェルがコマンド実行前にファイル名の一覧へ展開する。見た目が似ていても正規表現とは規則が異なり、grepの検索パターンにグロブの感覚で*を書くのが定番の失敗例。
パイプラインぱいぷらいん
| でコマンドをつなぎ、出力を次の入力へ渡す仕組み。
sort | uniq -c のように小さな部品を連結して複雑な加工を作る。
フィールドふぃーるど
1行を区切り文字で分けた1つ1つの列。
awk では既定で空白区切り、$1 $2 …で参照。-F で区切りを変更できる。
メタ文字めたもじ
正規表現で特別な意味を持つ文字。例: . * ^ $ [ ]。
そのままの文字として使いたいときは直前に \ を付けてエスケープする。
メタ文字めたもじ
正規表現の中で特別な意味を持つ記号。.や*、[ ]などが該当する。
.は任意の1文字、*は直前の繰り返しというように、文字そのものではなくパターンの部品として働く。記号自体を検索したいときは\.のようにバックスラッシュでエスケープする。シェルのワイルドカードとは意味が違う点に注意。
拡張正規表現(ERE)かくちょうせいきひょうげん
grep -E などで使う方言。+ ? { } ( ) | をそのまま書ける。
Extended Regular Expression の略。( ) でグループ化、| で「AまたはB」を、エスケープなしで書けて読みやすい。
基本正規表現(BRE)きほんせいきひょうげん
grep や sed の既定方言。+ ? { } ( ) | に \ が必要。
Basic Regular Expression の略。\+ \? \{ \} \( \) \| のようにエスケープして使う。
後方参照こうほうさんしょう
かっこでグループ化した部分がマッチした文字列を、\1 \2 のような番号で後から再利用する仕組み。
正規表現内の左から数えて何番目のかっこかに応じて \1 \2 … の番号が振られ、そのグループが実際にマッチした文字列をパターンや置換の別の場所で使い回せる。grep -E '(\w+) \1' のように検索条件として使うほか、sed の置換で s/\(.*\)円/\1 JPY/ のように一致部分を活かした書き換えにも使われる、実務での利用頻度が高い機能。
交替こうたい
| (縦棒)を使って「AまたはB」のように複数の候補のどれか1つにマッチさせる正規表現の書き方。
cat|dog は cat または dog のどちらかにマッチする。グループ化と組み合わせて (cat|dog)s? のようにかっこの内側だけに交替を効かせると、選択肢の範囲を狙った場所に限定できる。BREでは \| と書く必要があり、grep で交替を素直に使うなら拡張正規表現モードの -E を付けるのが一般的。
正規表現せいきひょうげん
文字列のパターンを記号で表す書き方。検索や置換に使う。
英語では regular expression。grep・sed・awk など多くのツールが対応する。
単語境界たんごきょうかい
\bで表す、単語の切れ目という「位置」に一致する正規表現の記法。
catを検索するとconcatenateにも当たってしまうが、\bcat\bなら単語としてのcatだけに絞れる。文字を消費せず位置だけに一致する点はアンカーの仲間。grepでは-wオプションでも同じ効果を得られる。
置換(s コマンド)ちかん
sed の s/old/new/ で文字列を書き換える操作。
末尾に g を付けると行内すべて、数字を付けるとn番目だけを置換する。
範囲アドレスはんいあどれす
sed で「開始,終了」のように2つのアドレスをカンマでつなぎ、その間の行をまとめて指定する書き方。
1,5 のような行番号どうしのほか、/BEGIN/,/END/ のように正規表現どうし、あるいは行番号と正規表現を混ぜても指定できる。d や p などのコマンドと組み合わせ、削除や表示の対象を「ここからここまで」という区間で絞り込む。
文字クラスもじくらす
[ ] で囲んだ中のどれか1文字にマッチする指定。
[abc] は a/b/c のいずれか、[0-9] は数字のように範囲も書ける。
文字クラスもじくらす
[abc]のように、角括弧内のどれか1文字と一致させる正規表現の書き方。
[0-9]で数字、[a-z]で小文字など範囲指定ができ、[^0-9]と先頭に^を置くと否定になる。角括弧の中では多くのメタ文字が普通の文字扱いになるなど、外側とルールが変わる点がつまずきどころ。
文脈オプションぶんみゃくおぷしょん
grepでマッチした行の前後の行もあわせて表示する-A -B -Cオプションの総称。
-A nはマッチ行の後にn行、-B nは前にn行、-C nは前後にn行ずつを追加で表示する。ログ調査で「エラーの前後で何が起きていたか」を確認するときによく使われる。
量指定子りょうしていし
直前のパターンの繰り返し回数を表す記号。* + ? {n} など。
* は0回以上、+ は1回以上、? は0〜1回、{n,m} はn〜m回。長く一致しようとする「最長一致」が既定。
量指定子りょうしていし
*や+、{n,m}のように、直前の要素の繰り返し回数を指定する記号。
*は0回以上、+は1回以上、?は0か1回、{2,5}は2〜5回を表す。掛かるのは「直前の1要素」だけなので、ab+はabbbには合うがababには合わない。この掛かり方の誤解が正規表現の典型的なミスになる。
連想配列れんそうはいれつ
数字ではなく文字列などをキーにして値を格納できる配列。awkのcount[$1]++などで使う。
キーに好きな文字列を使えるため、IPアドレスやステータスコードのように種類が事前に分からないデータを「種類ごとに数える・集める」用途に向く。存在しないキーへの++は自動的に0から始まり1になる。
貪欲マッチどんよくまっち
.*などの量指定子が、可能な限り長い範囲にマッチしようとする性質。
区切り文字を複数含む行で.*を使うと、最初の区切りではなく最後の区切りまで一気にマッチしてしまうことがある。対策として、区切り文字を除外した文字クラス(例: [^\ ]*や[^"]*)に置き換え、マッチできる範囲そのものを制限する方法がよく使われる。
貪欲マッチどんよくまっち
*などの量指定子が、可能な限り長い範囲に一致しようとする性質。
既定の正規表現は「取れるだけ取る」ため、<.*>は<a><b>の全体に一致してしまう。最短で止めたいときは<[^>]*>と書くか、PCRE系の*?(最短一致)を使う。HTMLタグの抽出などで最初にはまる有名なポイント。