正規表現の基本
Linux環境でテキスト処理を行う際、正規表現は非常に強力なツールです。以下に主要な正規表現パターンとその説明を示します。
| 文字 | 説明 |
| \\ | 次の文字を特殊文字、またはリテラル文字としてマークします。例えば、「n」は文字「n」に一致しますが、「\\n」は改行文字に一致します。 |
| ^ | 入力文字列の開始位置に一致します。 |
| $ | 入力文字列の終了位置に一致します。 |
| {n} | nは非負整数です。正確にn回一致します。例えば、「o{2}」は「Bob」の「o」には一致しませんが、「food」の2つのoには一致します。 |
| {n,} | nは非負整数です。少なくともn回一致します。例えば、「o{2,}」は「Bob」の「o」には一致しませんが、「foooood」のすべてのoに一致します。 |
| {n,m} | mとnは非負整数で、n<=mです。最小でn回、最大でm回一致します。例えば、「o{1,3}」は「fooooood」の最初の3つのoに一致します。 |
| * | 前のサブ表現に0回以上一致します。例えば、zo*は「z」、「zo」、および「zoo」に一致します。 |
| + | 前のサブ表現に1回以上一致します。例えば、「zo+」は「zo」および「zoo」に一致しますが、「z」には一致しません。 |
| ? | 前のサブ表現に0回または1回一致します。例えば、「do(es)?」は「do」または「does」の「do」に一致します。 |
| . | 「\\n」を除く任意の単一文字に一致します。 |
| (pattern) | patternに一致し、一致したサブ文字列を取得します。このサブ文字列は後方参照のために使用されます。 |
| x|y | xまたはyに一致します。例えば、「z|food」は「z」または「food」に一致します。 |
| [xyz] | 文字集合です。含まれる任意の1文字に一致します。例えば、「[abc]」は「plain」の「a」に一致します。 |
| [^xyz] | 否定文字集合です。リストされていない任意の文字に一致します。例えば、「[^abc]」は「plain」の「plin」に一致します。 |
| [a-z] | 文字範囲です。指定された範囲内の任意の文字に一致します。例えば、「[a-z]」は「a」から「z」までの任意の小文字に一致します。 |
正規表現の優先順位
正規表現における演算子の優先順位は以下の通りです(上から下へ、左から右へ優先順位が低下します):
| 演算子 | 説明 |
| \\ | エスケープ文字 |
| (), (?:), (?=), [] | 括弧と角括弧 |
| *、+、?、{n}、{n,}、{n,m} | 量指定子 |
| ^、$、\\任意のメタ文字 | アンカーとシーケンス |
| | | 選択(OR) |
grepコマンドでの正規表現の使用
grepコマンドは正規表現を使用してテキストパターンを検索するための強力なツールです。以下に主要なオプションを示します。
| オプション | 説明 |
| -E | POSIX拡張正規表現(ERE)を使用 |
| -G | POSIX基本正規表現(BRE)を使用 |
| -P | Perl正規表現(PCRE)を使用 |
| -i | 大文字と小文字を区別しない |
| -n | 一致したテキストが含まれる行の行番号を表示 |
| -v | 一致しない行を出力(反転) |
| -r | 再帰的に検索 |
| --color=auto | 一致した部分を色付きで表示 |
grepの使用例
# 拡張正規表現を使用して"zo"のみに一致
$ echo -e "zero\nzo\nzoo" | grep -E 'zo{1}'
# "zo"で始まるすべての単語に一致
$ echo -e "zero\nzo\nzoo" | grep -E 'zo{1,}'
# "www.example.com"と"www.test.com"に一致
$ echo -e "www.example.com\nwww.sample.com\nwww.test.com" | grep -E 'www\.(example|test)\.com'
# "sample"を含まない行を表示
$ echo -e "www.example.com\nwww.sample.com\nwww.test.com" | grep -Ev 'www\.sample\.com'
sedコマンドでの正規表現の使用
sed(ストリームエディタ)は、テキストをフィルタリングおよび変換するための強力なツールです。
| オプション | 説明 |
| -n | サイレントモード。一致した行のみを表示 |
| -e | スクリプトに複数のコマンドを追加 |
| -f filename | filenameファイルからコマンドを読み取る |
| -r | 拡張正規表現を使用 |
| -i | 入力ファイルの内容を直接変更 |
sedコマンドの基本操作
| コマンド | 説明 |
| s | 行内置換 |
| c | 行全体を置換 |
| a | 指定した行の後に挿入 |
| i | 指定した行の前に挿入 |
| p | 指定した行を印刷 |
| d | 指定した行を削除 |
sedの使用例
# ファイル内のすべての"old"を"new"に置換
$ sed -i 's/old/new/g' file.txt
# 4行目の3番目の"old"のみを"new"に置換
$ sed -i '4s/old/new/3' file.txt
# "pattern"を含む行のみを印刷
$ sed -n '/pattern/p' file.txt
# 2行目から5行目を削除
$ sed '2,5d' file.txt
awkコマンドの使用法
awkは、パターンスキャンおよび処理言語であり、特にテキスト処理に適しています。
awkの基本構文
awk [オプション] 'スクリプト' 変数=値 ファイル名
または
awk [オプション] -f スクリプトファイル 変数=値 ファイル名
awkの主なオプション
| オプション | 説明 |
| -F fs | 入力ファイルの区切り文字を指定 |
| -v var=value | ユーザー定義変数に値を代入 |
| -f scriptfile | スクリプトファイルからawkコマンドを読み取る |
awkの組み込み変数
| 変数 | 説明 |
| FILENAME | 現在の入力ファイル名 |
| $0 | 現在のレコード(行)全体 |
| $N | N番目のフィールド |
| FS | 入力フィールド区切り文字(デフォルトはスペース) |
| OFS | 出力フィールド区切り文字(デフォルトはスペース) |
| NF | 現在のレコードのフィールド数 |
| NR | 現在のレコード番号 |
awkの使用例
# ファイルの各行の1番目と3番目のフィールドを表示
$ awk '{print $1, $3}' data.txt
# コロンを区切り文字として2番目のフィールドを表示
$ awk -F: '{print $2}' /etc/passwd
# 3番目のフィールドが100より大きい行を表示
$ awk '$3 > 100' data.txt
# 行番号と内容をフォーマットして表示
$ awk '{printf "行%d: %s\n", NR, $0}' data.txt
Linux killコマンド
killコマンドは、プロセスにシグナルを送信するために使用されます。
主なシグナル
| シグナル値 | 動作 |
| -1 (SIGHUP) | 設定を再読み込みして再起動 |
| -2 (SIGINT) | Ctrl+Cと同様にプロセスを中断 |
| -9 (SIGKILL) | プロセスを強制終了 |
| -15 (SIGTERM) | 正常な方法でプロセスを終了 |
killコマンドの使用例
# プロセスID 1234を正常に終了
$ kill -15 1234
# プロセスID 5678を強制終了
$ kill -9 5678
# プロセス名でプロセスを終了
$ pkill -f "process_name"
# 特定のユーザーのすべてのプロセスを終了
$ pkill -u username