知っておきたい!コマンドラインでテキスト操作に使える13の便利なLinuxツール
GNU/Linuxディストリビューションには、テキスト処理のための豊富なプログラムが標準で含まれており、その多くはGNUコアユーティリティによって提供されています。習得には多少の学習が必要ですが、これらのツールを正しく使いこなせば、作業を大幅に効率化できます。
ここでは、コマンドラインユーザーなら必ず押さえておきたい、強力なテキスト操作ツールを13個紹介します。
1. cat
catはファイルを連結(concatenate)するために設計されたツールですが、実際には単一ファイルの内容表示によく使われています。引数なしで実行すると、Ctrl + Dが押されるまで標準入力を読み続けます(ターミナルからの直接入力、またはパイプ経由の場合は他のプログラムの出力)。標準入力は「-」で明示的に指定することも可能です。
catには便利なオプションが多数用意されています。主なものは以下の通りです。
-A:各行の末尾に「$」を表示し、印字できない文字をキャレット記法で表示します。-n:すべての行に行番号を付けます。-b:空行以外の行に行番号を付けます。-s:連続する空行を1行にまとめます。
次の例では、file1・標準入力・file3の内容を連結し、行番号を付けて表示しています。
cat -n file1 - file3
2. sort
その名の通り、sortはファイルの内容をアルファベット順や数値順に並べ替えるツールです。
3. uniq
uniqは、ソート済みのファイルから重複行を削除します。多くの場合、sortと組み合わせて1つのコマンドとしてパイプで連結して使われます。
4. comm
commは、ソート済みの2つのファイルを行単位で比較するツールです。出力は3列で構成され、1列目と2列目にはそれぞれ1番目・2番目のファイルにのみ存在する行が、3列目には両方のファイルに共通して存在する行が表示されます。
5. cut
cutは、文字位置・フィールド・バイトのいずれかを基準に、行の特定部分を取り出すために使います。ファイルから読み込むことも、ファイルを指定しない場合は標準入力から読み込むこともできます。
文字位置で切り出す場合
-cオプションで、単一の文字位置または1つ以上の範囲を指定します。
指定例:
-c 3:3文字目のみ-c 3-5:3文字目から5文字目まで-c -5または-c 1-5:1文字目から5文字目まで-c 5-:5文字目から行末まで-c 3,5-7:3文字目と、5文字目から7文字目まで
フィールドで切り出す場合
フィールドは1文字の区切り文字(デリミタ)で区切られ、-dオプションで指定します。-fオプションでフィールド位置や範囲を選択でき、書式は上記の文字位置指定と同じです。
6. dos2unix
GNU/LinuxやUnixでは通常、テキストの行末はラインフィード(LF)で表されますが、Windowsではキャリッジリターン+ラインフィード(CRLF)が使われます。Linux上でCRLF形式のテキストを扱うと、互換性の問題が発生することがあります。そんなときに役立つのがdos2unixで、CRLFの行末をLFに変換してくれます。
次の例では、dos2unixの実行前後でfileコマンドを使い、テキスト形式の変化を確認しています。
7. fold
長いテキスト行を読みやすく、扱いやすくしたいときは、foldを使って指定した幅で行を折り返せます。
デフォルトでは指定幅に厳密に合わせるため、必要に応じて単語の途中でも改行されます。
fold -w 30 longline.txt
単語を分割したくない場合は、-sオプションを付けることで、スペースの位置で改行するようになります。
fold -w 30 -s longline.txt
8. iconv
このツールは、テキストをある文字エンコーディングから別のエンコーディングへ変換します。特殊なエンコーディングのファイルを扱う際に非常に便利です。
iconv -f 入力エンコーディング -t 出力エンコーディング -o 出力ファイル 入力ファイル
- 「入力エンコーディング」:変換元のエンコーディング
- 「出力エンコーディング」:変換先のエンコーディング
- 「出力ファイル」:iconvが保存先として使うファイル名
- 「入力ファイル」:iconvが読み込むファイル名
補足:iconv -lを実行すると、利用可能なエンコーディングの一覧を確認できます。
9. sed
sedは強力かつ柔軟なstream editor(ストリームエディタ)で、最もよく使われるのは次の構文による文字列の検索と置換です。
次のコマンドは、指定したファイル(または標準入力)から読み込み、正規表現パターンに一致する部分を置換文字列に置き換えて、結果をターミナルに出力します。
sed s/パターン/置換文字列/g ファイル名
元のファイル自体を変更したい場合は、-iフラグを使用します。
10. wc
wcユーティリティは、ファイル内のバイト数・文字数・単語数・行数を出力します。
11. split
splitを使うと、1つのファイルを行数・サイズ・ファイル数のいずれかを基準に、複数の小さなファイルへ分割できます。
行数で分割する場合
split -l 行数 入力ファイル 出力プレフィックス
バイト数で分割する場合
split -b バイト数 入力ファイル 出力プレフィックス
指定したファイル数に分割する場合
split -n ファイル数 入力ファイル 出力プレフィックス
12. tac
tacはcatの逆をつづった名前で、まさにその通りの動作をします。ファイルの行を逆順にして表示します。
13. tr
trツールは、文字セットの変換や削除に使用します。
文字セットは通常、文字列または文字の範囲で指定します。たとえば以下のようなものがあります。
- 「A-Z」:すべての英大文字
- 「a-z0-9」:英小文字と数字
- 「\n[:punct:]」:改行文字と句読点
詳細については、trのマニュアルページを参照してください。
ある文字セットを別のセットに変換するには、次の構文を使います。
tr SET1 SET2
たとえば、英小文字を対応する大文字に置き換えるには、次のようにします。
tr "a-z" "A-Z"
文字セットを削除するには、-dフラグを使います。
tr -d SET
また、指定セットの補集合(セット以外のすべての文字)を削除するには、-dcを使用します。
tr -dc SET
まとめ
Linuxのコマンドラインには、覚えるべきことがまだまだたくさんあります。今回紹介したコマンドが、コマンドラインでのテキスト処理をより快適にする助けになれば幸いです。
-
Linuxで使えるおすすめデータ復元ツール7選
画面が突然真っ暗になったり、ノートパソコンが警告なしにフリーズしたりしたことはありませんか?ハードドライブから異音が聞こえ始めたり、ホームパーティションへの保存が突然できなくなったりしたら、なおさら焦るものです。こうしたディスクの破損や故障の兆候に不安を覚えるのは当然ですが、すぐにパソコンを諦める必要はありません。本記事では、失われたデータを取り戻し、デジタルライフを軌道に戻すためのLinux向け復元ツールを7つご紹介します。1. Trinity Rescue Kitデータ復元専用に作られたこのLinuxライブディストリビューションは、一時期開発が終わったと思われていましたが、数年前に開発者が
-
楽しく学べる!Bash習得に役立つコマンドラインゲーム3選
学習は大変な作業であり、誰も「作業」そのものは好きではありません。つまり、Bashがどれだけ習得しやすい言語だとしても、やはり「勉強」という感覚を拭いきれないかもしれません。しかし、ゲームを通して学ぶなら話は別です。 ターミナルの使い方を教えてくれるゲームなど、そう多くは存在しないと思うでしょう。実際、その通りなのです。PCゲーマーならご存知の通り、FalloutシリーズにはVault内にターミナル式のコンピュータが登場し、テキストでコンピュータと対話するという概念に自然と親しめるようになっています。AlpineやEmacsに似たアプリケーションも登場しますが、残念ながらFalloutをプレイ