Linuxコマンド勉強してみた!
〜テキストを処理してみよう〜

Linuxコマンド
スポンサーリンク

今、Linuxでテキスト処理をしてるんだよね。

らくひろくんに覚えて欲しいな〜

Linuxでテキスト処理。。まだフォルダを移動したり、ファイルを消したりしている段階ですけど。。

大丈夫大丈夫。Linuxってテキスト処理の便利なコマンドもたくさんあって便利だから勉強してみてね。

は。。はい。わかりました。

テキストを処理してみよう

Linuxコマンドを使ってテキストファイルの処理をしてみましょう。
基礎的なことが色々あるかもしれませんが、とりあえずすっ飛ばします(笑)
テキストファイルを処理するために必要なこんなことを一緒に勉強しましょう。

  1. テキストファイルを表示する
  2. テキストファイル内の文字列を検索する
  3. テキストファイル内の違いを調べる
  4. テキストファイルの中身を入れ替える
  5. テキストファイル内の重複行を削除する
  6. テキストファイル内の文字を入れ替える
あくまでもテキストファイルを編集するのではなく、処理をする方法ですね!
ではやっていきましょ〜

テキストファイルを表示する

ファイルを表示するもっとも基礎的なcatコマンドはパート2で確認したので、そちらを確認してください。
今回はcatコマンド以外を解説します。
head

head ファイル名 → ファイルの先頭10行を表示
head -n ファイル名 → ファイルの先頭n行を表示

hiro:Test hiroaki2$ head simplefile5
aaaaaa
bbbbb
cccccc
ddddd
eeeee
ffffff
lllllll
mmmmmm
rrrrrr
111111
hiro:Test hiroaki2$ head -3 simplefile5
aaaaaa
bbbbb
cccccc
tail

tail ファイル名 → ファイルの最後10行を表示
tail -n ファイル名 → ファイルの最後n行を表示
tail +n ファイル名 → ファイルのn行目からを表示

hiro:Test hiroaki2$ tail simplefile5
wwwwww
qqqqqqqq
77777777
xxxxxxxx
+++++++++
gggggggg
hhhhhhhhh
yyyyyyyyyyy
¥¥¥¥¥¥¥¥¥
66666666
hiro:Test hiroaki2$ tail -5 simplefile5
gggggggg
hhhhhhhhh
yyyyyyyyyyy
¥¥¥¥¥¥¥¥¥
66666666
hiro:Test hiroaki2$ tail +5 simplefile5
eeeee
ffffff
lllllll
mmmmmm
rrrrrr
111111
555555
nnnnnnn
bbbbb
cccccc
ttttt
pppppppp
wwwwww
qqqqqqqq
77777777
xxxxxxxx
+++++++++
gggggggg
hhhhhhhhh
yyyyyyyyyyy
¥¥¥¥¥¥¥¥¥
66666666
tail -5とtail +5の違いがピントこなかったのですが、最後の5行を表示するか5行目から表示するかの違いですね!
headとtailと組み合わせると・・・
headとtailを組み合わせると、たとえば3行目から10行目などを表示させることができます。
組み合わせるためにheadとtailに加えて、|(パイプ処理)を使用します。
hiro:Test hiroaki2$ ls -F
html/		simplefile5
hiro:Test hiroaki2$ tail +3 simplefile5 | head -7 ・・3行目から7行分を表示する。
cccccc
ddddd
eeeee
ffffff
lllllll
mmmmmm
rrrrrr
これで、3行目から7行分を表示することで3行目から10行目を表示することができました!
less

less [オプション] ファイル名 → テキストをページ単位で表示する

lessコマンドはファイルの中身が表示されるので、ファイルの中を移動したり、途中でコマンドを終了する操作が必要です。
lessでファイルを操作中

矢印キー(上・下) → テキストを上下に表示する
q → lessコマンドを終了する

hiro:Test hiroaki2$ ls -F
html/		simplefile5
hiro:Test hiroaki2$ less simplefile5
lessコマンドを使用してファイルを表示すると下のような画面になります。
「q」をおすことで表示が終了します。lessコマンドで 長いテキストファイルの中身もみることができますね!

テキストファイル内の文字列を検索する

grep

grep [オプション] 文字列のパターン ファイル名 → 文字列を検索する

使いそうなオプション

-n → 行番号も表示
-f → パターンをfileから読み込む
-i → 大文字と小文字を区別しない
-l → マッチしたファイルのファイル名を表示
-w → 単語として探す

ファイル検索としてよく使うコマンドgrepですね!
オプションなど色々覚えることが多いので、最低限だけ記載しました。とりあえず使って見ましょう。
hiro:Test hiroaki2$ grep aa simplefile5
aaaaaa
hiro:Test hiroaki2$ grep xx simplefile5
xxxxxxxx
hiro:Test hiroaki2$ grep cc simplefile5 -ccがある行を表示
cccccc
Cccca
cccccc
Cccc
hiro:Test hiroaki2$ grep -n cc simplefile5 -行番号も表示する
3:cccccc
10:Cccca
15:cccccc
19:Cccc
hiro:Test hiroaki2$ grep cc simplefile5 simplefile6 -複数ファイルの検索のときはファイル名も表示する
simplefile5:cccccc
simplefile5:Cccca
simplefile5:cccccc
simplefile5:Cccc
simplefile6:Cccc
hiro:Test hiroaki2$ grep -w Cccc simplefile5 -Ccccの単語だけを探す
Cccc
OR検索・AND検索をする

grep -e 文字列1 -e 文字列2 ファイル名 → 文字列1と文字列2のOR検索 grep 文字列1 ファイル名 | grep 文字列2 → 文字列1と文字列2のAND検索

grepは文字列を探すだけではなくて、正規表現で探すこともできますね!
正規表現のときはとりあえず” ” で囲っておきましょう。
正規表現

^文字列 → 行の先頭が文字列で始まる
$文字列 → 行末に文字列がある
. → 任意の1文字を表す
* → 直前の文字の0回以上の繰り返し
\ → 正規表現としては認識しない
[…] → []内の任意の1文字
[^abc] → a,b,c 以外のどれか1文字
[A-Z] → A-Zのどれか1文字
[1-9] → 1-9のどれか1文字

正規表現を使って文字列を探して見ましょう。
hiro:Test hiroaki2$ grep "^a" simplefile5
aaaaaa
hiro:Test hiroaki2$ grep "^[a-c]" simplefile5 - a~cのどれかで始まる単語を検索
aaaaaa
bbbbb
cccccc
bbbbb
cccccc
hiro:Test hiroaki2$  grep "[^a-f]" simplefile5 - a~fのどれかで始まっていない単語
lllllll
mmmmmm
rrrrrr
Cccca
111111
555555
nnnnnnn
ttttt
pppppppp
Aaaa
Cccc
Dedgeaea
wwwwww
qqqqqqqq
77777777
xxxxxxxx
+++++++++
gggggggg
hhhhhhhhh
yyyyyyyyyyy
¥¥¥¥¥¥¥¥¥
66666666
hiro:Test hiroaki2$  grep "c.*c" simplefile5 - c~cになっている単語
cccccc
Cccca
cccccc
Cccc
hiro:Test hiroaki2$  grep "c..a" simplefile5 - cとaの間に2文字ある単語
Cccca

テキストファイル内の違いを調べる

diff

diff [オプション] ファイル名1 ファイル名2 → ファイル内容の違いを調べる
diff -i ファイル名1 ファイル名2 → 英大文字と小文字の違いを無視する

diffコマンドの出力メッセージ

1つめのファイルの行番号 処理方法 2つめのファイルの行番号
どのような処理をすると一緒のファイル名になるかという情報を表している

実際にdiffコマンドを使ってみましょう。
hiro:Test hiroaki2$ cat -n  difffile1
     1	aaaaa
     2	cccccc
     3	3djflajdlajfla
     4	dasdsaqq
     5	zzzz
     6	dreee
     7	cccc
     8	uuuuu
     9	qqqqqqq
    10	mmmmm
hiro:Test hiroaki2$ cat -n  difffile2
     1	000000
     2	cccccc
     3	3djflajdlajfla
     4	dasdsaqq
     5	dreee
     6	cccc
     7	444444
     8	qqqqqqq
     9	mmmmm
    10	oooo
    11	qqqqq
    12	mmmmm
hiro:Test hiroaki2$ diff difffile1 difffile2
1c1               - difffile1の1行目とdifffile2の1行目が異なる
< aaaaa       - difffile1のaaaaaを000000にchange(変換)処理すると一致。
---
> 000000
5d4         - difffile1の5行目とdifffile2の4行目が異なる
< zzzz       - difffile1をzzzzを削除すると一致
8c7         - difffile1の8行目とdifffile2の7行目が異なる
< uuuuu           - difffile1のuuuuuを444444にchange(変換)処理すると一致  
---
> 444444
10a10,12          - difffile1の10行目とdifffile2の10~12行目が異なる
> oooo            - difffile1にoooo,qqqqq,mmmmmを行う
> qqqqq
> mmmmm
今日は疲れました。。 また明日! 詳しい説明していなくてごめんなさい。
実際に自分の環境でも打ち込んで見てくださいね!では!

コメント

タイトルとURLをコピーしました