リダイレクトを使ったファイル生成
ヒアドキュメント
- 前回少し見た ヒアドキュメント というものを使ってみたく、以下のようにしてファイル生成してみた
- Debian - Wikipedia から Debian の各バージョンのコード名(トイ・ストーリーの出演キャラクター)をコピペ
- (トイ・ストーリーは少なくとも 50 回以上は観てます!!!)
$ cat <<EOF > toy_story.txt
heredoc> buzz
rex
bo
hamm
slink
potato
woody
sarge
etch
lenny
squeeze
wheezy
jessie
stretch
buster
bullseye
heredoc> EOF
$ cat toy_story.txt
buzz
rex
bo
hamm
slink
potato
woody
sarge
etch
lenny
squeeze
wheezy
jessie
stretch
buster
bullseye
昇順ソート
$ cat toy_story.txt | sort -s > toy_story-sort_s.txt
$ cat toy_story-sort_s.txt
bo
bullseye
buster
buzz
etch
hamm
jessie
lenny
potato
rex
sarge
slink
squeeze
stretch
wheezy
woody
降順ソート -r
$ cat toy_story.txt | sort -r > toy_story-sort_r.txt
$ cat toy_story-sort_r.txt
woody
wheezy
stretch
squeeze
slink
sarge
rex
potato
lenny
jessie
hamm
etch
buzz
buster
bullseye
bo
grep / 正規表現
$ cat toy_story.txt | grep ^b > toy_story-grep.txt
$ cat toy_story-grep.txt
buzz
bo
buster
bullseye
uniq
- 重複削除
uniq
コマンドは隣り合った行しか比較しないので、先に sort
コマンドを使って並べ替えるのが一般的
$ echo buzz >> toy_story-grep.txt
$ cat toy_story-grep.txt
buzz
bo
buster
bullseye
buzz
$ uniq toy_story-grep.txt # buzz は隣り合っていないため重複は取り除かれない
buzz
bo
buster
bullseye
buzz
$ sort toy_story-grep.txt | uniq
bo
bullseye
buster
buzz
- ただし、
sort
コマンドにも重複行を取り除く -u
オプションがあるので、並べ替えが必要なファイルであればこちらを使う方が手軽
$ echo bo >> toy_story-grep.txt
$ cat toy_story-grep.txt
buzz
bo
buster
bullseye
buzz
bo
$ cat toy_story-grep.txt | sort -u
bo
bullseye
buster
buzz
パイプ
- 標準入出力で得られた結果を次のコマンドに渡す
- パイプはいくつでも連結できる
$ echo buzz >> toy_story.txt
$ cat toy_story.txt
buzz
rex
bo
hamm
slink
potato
woody
sarge
etch
lenny
squeeze
wheezy
jessie
stretch
buster
bullseye
buzz
$ cat toy_story.txt | sort -r | uniq | grep ^b
buzz
buster
bullseye
bo
/dev/null
/dev/null
はすべての情報を無に帰す特別なファイル- コマンドを実行していく過程で生成される不要な出力結果を削除するために使われることが多い
$ echo goodbye > /dev/null
&>/dev/null と >/dev/null