Linux の基礎知識

【Linuxの基礎知識】テキスト操作について!

2020年4月9日

ここでは主にファイルやテキストをコマンドを使って思い通りに表示させたり、検索したりといった方法を解説していきます。

Linuxコマンドは種類が非常に多いですが、うまく利用すれば作業の大幅短縮が見込めます。

ソートなども可能ですので、ぜひ覚えていきましょう。

ファイル内容をソートする「sort

ファイルに記述された内容をソートするには「sort」コマンドを利用します。

コマンドの書式

sort[オプション][ファイル1 ファイル2...]

コマンドの主なオプション

  • -f(--ignore-case):並び替え時に大文字/小文字を区別しない
  • -V(--version-sort):バージョンを数字順で並べ替える
  • -n(--numeric-sort):文字列を数値と見なして並べ替える
  • -h(--human-numeric-sort):人が読むことのできる形式の数値で並べ替える
  • -g(--general-numeric-sort):一般的な数値として並べ替える
  • -M(--month-sort):月名で並べ替える
  • -b(--ignore-leading-blank):先頭の空白を無視して並べ替える
  • -i(--ignore-nonprinting):表示可能な文字だけを対象に並べ替える
  • -r(--reverse):逆順で並べ替える

カレントディレクトリに下記の数字が記述された「test01.txt」が作成されているとします。

test01.txt

1
5
75
50
10

この内容を、ソートしてみましょう。

$ sort test01.txt
$ sort -n test01.txt
$ sort -r test01.txt
$ sort -nr test01.txt

「sort」コマンドは、ファイル内容を文字列として認識している為「10」と「5」では「10」のほうが先に表示されます。

「5」と「10」を比較した場合、「sort」コマンドは、一見「数値」に見える値を「文字列」として判断します。「10」の1文字目を取って「1」と認識し、その結果「5」と「1」では「1」の方がい小さいと判断するのです。

オプション(-nr等)を組み合わせれば「数値」として「降順」ソートも可能となります。
コマンドオプションを付与することで、降順ソートで表示させたり数値としてソートさせることが可能になります。

ファイル内の重複行を削除する「uniq

ファイルに記述された内容から重複した行を削除するには、「uniq」コマンドを使用します。

コマンドの書式

uniq[オプション]入力ファイル[出力ファイル]

コマンドの主なオプション

  • -c(--count):各行の前に出現回数を出力する
  • -u(--unique):重複していない行だけを出力する
  • -d(--repeated):重複した行だけを出力する
  • -D(--all-repeated):重複する行を全て出力する
  • -i(--ignore-case):比較時に大文字と小文字の違いを無視する

カレントディレクトリに昇順ソートされた「test02.txt」が作成されているとします。
uniqコマンドは隣り合った行しか比較しないため、予めsortコマンドでソートしておくことが前提となります。

test02.txt

1111
1234
1234
5678

ここから、重複行を削除してみましょう。

$ uniq test02.txt
$ uniq -c test02.txt
$ uniq -d test02.txt

重複していた「1234」が削除され、一つにまとまりました。オプションのなかには、重複した行数を表示したり、重複した内容のみを表示させたりする機能もあります。

文字を置換する「tr

ファイルに記述された内容をある文字へ置換するには、「tr」コマンドを使用します。

コマンドの書式[

tr[オプション]文字列1[文字列2]

コマンドの主なオプション

  • -d(--delete):[文字列1]に含まれる文字があったら削除する
  • -s(--squeeze-repeats):[文字列1]に含まれる文字が連続していたらまとめる
  • -t(--truncate-set1):[文字列1]を[文字列2]の長さに切り詰めて処理を行う
  • -c(--complement):[文字列1]に含まれない文字全てを対象とする

カレントディレクトリに「test03.txt」が作成されているとします。

test03.txt

AAABBBCCDD

ここから、「A」を「Z」に置換してみます。

$ tr A Z < test03.txt
$ tr -d B < test03.txt

特定の文字列を削除したい場合は、「-d」オプションを付与することで可能となります。

文字列を検索する「grep

ファイルの記述のなかにある特定の文字列が含まれているかどうかを判別し、抽出するには「grep」コマンドを使用します。

コマンドの書式[

grep[オプション] 検索パターン ファイル

コマンドの主なオプション

  • -e(--regexp):検索パターンを指定する
  • -G(--basic-regexp):検索に基本正規表現を使う
  • -E (--extended-regexp):検索に拡張正規表現を使う
  • -P (--perl-regexp):検索にPerl正規表現を使う
  • -f (--file):ファイルに書かれているパターンを検索する
  • -i (--ignore-case):大文字と小文字を区別しない
  • -w (--word-regexp):単語全体でパターンと一致するものを検索する
  • -x (--line-regexp):行全体がパターンと一致するものを検索する
  • -v (--invert-match):パターンに一致しない行を表示する
  • -s (--no-messages):エラーメッセージを表示しない
  • -q(--quiet):結果を表示しない
  • -L(--files-without-match):一致するものが含まれていないファイル名のみ表示
  • -I(--files-with-matches):一致するものが含まれているファイル名のみ表示
  • -c(--count):一致するものが含まれている回数のみ表示
  • -n(--line-number):行番号を併せて表示する
  • -H(--with-filename):ファイル名を併せて表示する
  • -h(--no-filename):ファイル名を表示しない

workディレクトリのなかに「test04.txt」と「test05.txt」の2ファイルがあるとします。

/work/test04.txt

Orange

/work/test05.txt

Grape

workディレクトリの中から、「ra」という文字列が含まれているファイルを抽出するには、下記のようにコマンドを実行します。
「work/*」は、work配下のファイルをすべて対象として検索を実行します。

$ grep ra work/*
$ grep -i g work/*

ちょっと分かりずらい為、実機で実行したイメージを下記に張り付けておきます。
最近のLinuxでは、該当箇所を強調表示してくれます!

テキストをページ単位で表示する「more , less」

ファイルの内容をページ単位で表示するには、moreコマンド、もしくはlessコマンドを用います。moreとlessはほぼ同じ機能ですが、moreは末尾まで参照すると自動的にプロンプトへ戻るのがlessとの違いです。

しかしながら、両者とも使用頻度はそれほど高くはありません。何故なら、通常、ファイルの中身を参照する場合は「cat」コマンドを使うことが一般的だからです。複数ページにわたる長文以外は、「cat」コマンドで事足りてしまうことが多いのです。

一応、知識として頭の片隅に置いておく程度で良いと思います。

コマンドの書式[

more[オプション]ファイル名
less [オプション] ファイル名

moreコマンドの主なオプション

  • +数値:数値で指定した行から表示する
  • +/文字列:指定した文字列を検索して、見つけた行の2行上から表示する
  • -s:連続した空行を1行にする
  • -l:改ページを無視する
  • -u:下線の処理を行わない
  • -数値:画面の行数を指定する
  • -f:画面での行数ではなく、データの行数を表示する
  • -d:無効なキーが入力された場合に、ヘルプを表示する

lessコマンドの主なオプション

  • +行数,-行数:指定した行から表示する
  • +/文字列:指定文字列を検索し、見つけた行から表示する(正規表現可)
  • -p文字列(--pattern):指定文字列を検索し、見つけた行から表示する(正規表現可)

類似コマンドとしてはcatコマンド、vimコマンドなどがありますが、それぞれ用途で使い分けると良いでしょう。

cat」:一気に最後まで表示させます。ファイルを機械的に連結させる、コマンドライン引数にファイルの中身を機械的に渡す等の時に使います。

vim」:ファイル編集をするときに使用します。参照するだけなら、「cat」コマンドを使用しましょう。

まとめ

この記事では、テキストの内容を処理するLinuxコマンドについて解説しました。

Linuxでのテキスト処理は、WindowsやMACの様に「マウス」を使った編集は行いません。黒い画面へひたすらコマンドを打ち込んで操作していきます。

ちょっとした抵抗感を感じるかもしれませんが、この操作に慣れることで動的にテキストを編集することが出来るようになります。エクセルに張り付けて並び替え等の作業が、コンソール上で一発で出来てしまうのです。

もうWindowsやMACのテキストエディタでは物足りなくなり戻れません。

よく読まれている記事

1

目次1 Shellとは?1.1 代表的なシェルの種類2 シェルスクリプトの違いとは? Shellとは? Shellとは、人間の理解できる言葉を機会へ伝えるプログラムです。 Linux環境でコマンドプロ ...

2

Linuxは主にサーバー用として利用されるOSです。大規模な基幹システムの開発者、ロボットや家電開発等の組み込み系エンジニア、ネットワーク機器やデータベースに携わるインフラエンジニアは触れることが多い ...

3

プログラミング言語を習得しようと思った時、必ずと言っていいほど候補として挙げられるのが「Java」というプログラミング言語です。 「Java」は、現在日本で最も使われている言語であり、非常に人気のある ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Linux の基礎知識

Copyright© Beエンジニア , 2020 All Rights Reserved.