今回紹介するのは以下
・ファイルの内容を表示するコマンド(more,less,cat,head,tail,wc)
・ファイルを加工するコマンド(cut,sort,uniq,grep)
・grepと正規表現の組み合わせ
・リダイレクト演算子(<,<<,>,>>,2>,2>&1,)
■ファイルの内容を表示するコマンド
・more
→ファイルの内容をページ(画面)ごと表示。
・less
→ファイルの内容をページ(画面)ごと表示(※moreの拡張版)。
・moreやlessコマンドのページの操作。
→1ページ進む:スペース
→1ページ戻る:b
→終了:q
→先頭へ戻る:g(lessのみ)
→末尾へ進む:G(lessのみ)
例:ページ単位でファイルの内容を表示するコマンド。
→more
→less
・cat
→ファイルを全て表示。
・head
→ファイルの先頭を表示。
・tail
→ファイルの末尾を表示
・wc
→ファイルの行数、ワード数、バイト数を表示。
例:ファイル「file.txt」の先頭5行だけを表示するコマンド。
→head -n5 file.txt
例:ファイル「file.txt」の行数やワード数、バイト数などを表示する場合「$ _______ file.txt」の空欄に当てはまるコマンド。
→wc
■ファイルを加工するコマンド
・cut
→ファイルまたは標準入力の各行から指定したフィールドを抽出。
例:ファイル「file.txt」の内容から3番目と4番目のフィールドを抽出するコマンド。
→cut -d: -f3,4 file.txt
※タブ以外の文字をデリミタとして使用したい場合は「-d」オプションを使用。
・sort
→行単位でファイルの内容をソート(並び替え)。
例:以下は「fileA.txt」の内容である。
$ cat fileA.txt
AAAA
aaaa
bb
xyzabc
dddd
aaaa
以下のような並び替えの出力を行うコマンド。
$ _______ fileA.txt
AAAA
aaaa
aaaa
bb
dddd
xyzabc
→sort
例:コマンド「sample_cmd」の出力をソートして表示するコマンド。
→sample_cmd | sort
例:ファイル「file.txt」には、スペースで区切られたフィールドが10個存在する。その5番目のフィールドを基準に並べ替えを行うコマンド。
→sort -k5 file.txt
※フィールドを指定して並べ替えを行う場合は「-k」オプションを指定。
・uniq
→連続して重複した行を1行にまとめて表示。
例:以下は「fileA.txt」の内容である。
$ cat fileA.txt
AAAA
aaaa
bb
AAAA
dddd
aaaa
重複した内容をまとめて出力するコマンド。
→sort fileA.txt | uniq
※sortで並び替えた後にuniqで重複行をまとめるのが定石。
・grep
→パターンにマッチする文字列を含む行を抽出。
■grepと正規表現の組み合わせ
・grep [オプション] 検索パターン [ファイル名]
→マッチした行の行数を表示:-c
→大文字と小文字を区別しない:-i
→マッチしなかった行を表示:-v
→拡張正規表現を表示:-E
例:ログファイル「/var/log/messages」へ出力されたログメッセージから「SampleApp」のログをすべて抽出するコマンド。
(ただしログには「sampleapp」「SAMPLEAPP」など大文字と小文字が混ぜて出力されている)。
→grep -i "SampleApp" /var/log/messages
例:grepコマンドで正規表現「?」を使用して検索したい場合に指定するオプション。
→-E
・任意の一文字:.
→「a..」はaから始まる3文字(aaaやabc)。
例:ファイル「file.txt」からgrepコマンドを用いて「a」から始まるアルファベット3文字以上の単語のある行を抽出するコマンド。
→grep 'a..' file.txt
※検索対象をシングルクォーテーションの「''」で囲む。
・直前の文字の0回以上の繰り返し:*
→「.*」は任意の文字列。
例:以下の文字列から正規表現「g.*e」にマッチする文字列はどれか。
dragon fruit
mango
grape
melon
orange
→grape
→orange
※「g<0文字以上の任意の文字または文字列>e」がある文字列
・直前の文字の0回または1回の繰り返し:?
→「abc?」は「ab」または「abc」
例:ファイル「file.txt」から文字列「cat」または「cats」を含む行を抽出する正規表現。
→cats?
※文字「?」は、直前の文字の0回または1回の繰り返しを意味する。
・カッコ内のいずれか1文字:[]
→[abc]はa,b,cのいずれか1文字。
・カッコ内で範囲を指定:[-]
→[a-z]は小文字のアルファベットの1文字。
・カッコ内で先頭にある場合は後続の文字以外:[^]
→[^abc]はa,b,c以外のどれか1文字。
例:正規表現で、abcdeのいずれか1文字を表すもの。
→[abcde]
→[a-e]
・行頭:^
→「^a」はaから始まる行。
※カッコ指定で[^a]の場合はa以外(真逆の意味)になるので注意。
・行末:$
→「a$」はaで終わる行。
例:grepコマンドでファイル「file.txt」に空行を除いた行が何行あるか数えるコマンド。
→grep -cv '^$' file.txt
※空行は、ファイルの先頭「^」と末尾「$」に何も文字がないことから「^$」により表現。
例:ファイル「file.txt」から、行の先頭が「#」で始まる行を抽出する正規表現。
→^#
※「^#*」の場合は「*」は0文字以上を表すため、「#」が含まれていない行も抽出。
例:ファイル「file.txt」から、空行(何も入力されていない行)でない行を抽出する場合「$ grep -v '____' file.txt」の空欄に当てはまる正規表現。
→^$
※ファイルの先頭「^」と末尾「$」に何も文字がないことから「^$」は空行を意味する。
・次の1文字をエスケープ文字:\
→「\*」は"*"という文字を表す。
例:ファイル「file.txt」から、文字「$」のある行を抽出するコマンド。
→grep '\$' file.txt
※文字「$」は正規表現ですが、文字として扱いたい場合は「\」を使用。
■リダイレクト演算子
・標準入力へ送る:<
例:ファイル「file.txt」から文字列「Linux Essentials」に該当する行を抽出する場合「$ grep "Linux Essentials" ___ file.txt」の下線部に当てはまるもの。
→<
→(何も入力しない)
・終了文字まで標準入力へ送る:<<
・標準出力をファイルへ送る:>
例:コマンド「sample_cmd」は標準出力と標準エラー出力へメッセージを出力するコマンドで、標準出力へ出力する内容だけをファイル「sample.txt」へ出力したい場合のコマンド。
→sample_cmd > sample.txt
・標準出力をファイルへ追記:>>
例:既存のファイル「file.txt」へls -lコマンドの実行結果を出力したい。ただし既に書かれている内容は消さずに追記するコマンド。
→ls -l >> file.txt
・標準エラー出力の出力先を指定:2>
例:コマンド「sample_cmd」は標準出力と標準エラー出力へメッセージを出力するコマンドで、標準エラー出力へ出力するメッセージだけをファイル「error.txt」へ出力したい。ただし既にファイルが存在する場合は上書きする。
→sample_cmd 2> error.txt
・標準エラー出力の出力先を、標準出力の出力先と一緒にする:2>&1
例:「ls fileA fileB」とした場合、実行結果とエラーメッセージをファイル「ls.txt」へ出力するコマンド。
→ls fileA fileB > ls.txt 2>&1