今、Linuxでテキスト処理をしてるんだよね。
らくひろくんに覚えて欲しいな〜
Linuxでテキスト処理。。まだフォルダを移動したり、ファイルを消したりしている段階ですけど。。
大丈夫大丈夫。Linuxってテキスト処理の便利なコマンドもたくさんあって便利だから勉強してみてね。
は。。はい。わかりました。
テキストを処理してみよう
Linuxコマンドを使ってテキストファイルの処理をしてみましょう。
基礎的なことが色々あるかもしれませんが、とりあえずすっ飛ばします(笑)
テキストファイルを処理するために必要なこんなことを一緒に勉強しましょう。
- テキストファイルを表示する
- テキストファイル内の文字列を検索する
- テキストファイル内の違いを調べる
- テキストファイルの中身を入れ替える
- テキストファイル内の重複行を削除する
- テキストファイル内の文字を入れ替える
ではやっていきましょ〜
テキストファイルを表示する
ファイルを表示するもっとも基礎的なcatコマンドはパート2で確認したので、そちらを確認してください。今回はcatコマンド以外を解説します。
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 ファイル名 → ファイルの最後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
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
less [オプション] ファイル名 → テキストをページ単位で表示する
矢印キー(上・下) → テキストを上下に表示する
q → lessコマンドを終了する
hiro:Test hiroaki2$ ls -F
html/ simplefile5
hiro:Test hiroaki2$ less simplefile5
「q」をおすことで表示が終了します。lessコマンドで 長いテキストファイルの中身もみることができますね!
テキストファイル内の文字列を検索する
grep [オプション] 文字列のパターン ファイル名 → 文字列を検索する
-n → 行番号も表示
-f → パターンをfileから読み込む
-i → 大文字と小文字を区別しない
-l → マッチしたファイルのファイル名を表示
-w → 単語として探す
オプションなど色々覚えることが多いので、最低限だけ記載しました。とりあえず使って見ましょう。
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
grep -e 文字列1 -e 文字列2 ファイル名 → 文字列1と文字列2のOR検索 grep 文字列1 ファイル名 | grep 文字列2 → 文字列1と文字列2のAND検索
正規表現のときはとりあえず” ” で囲っておきましょう。
^文字列 → 行の先頭が文字列で始まる
$文字列 → 行末に文字列がある
. → 任意の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 [オプション] ファイル名1 ファイル名2 → ファイル内容の違いを調べる
diff -i ファイル名1 ファイル名2 → 英大文字と小文字の違いを無視する
1つめのファイルの行番号 処理方法 2つめのファイルの行番号
どのような処理をすると一緒のファイル名になるかという情報を表している
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
実際に自分の環境でも打ち込んで見てくださいね!では!
コメント