0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Linux入門 3-6 フィルタを使ったテキストストリームの処理

Last updated at Posted at 2022-01-11


[Udemyの動画講座]:https://www.udemy.com/course/linuxlpic/?utm_source=bene-content-marketing&utm_campaign=normal&utm_content=story&utm_term=career&utm_medium=udemyads
[Linux入門 3-5]:https://qiita.com/hoglet/items/d6f97403e3e90283e742
[Linux入門 3-7]:https://qiita.com/hoglet/items/b2f389fb7f82e6bc9e79

はじめに

Linux初学者である自分向け用の記事です。[Udemyの動画講座]を参考にしました。
僕の勉強法は動画を見る実際に動かしてみる問題演習という流れです。

前回まで:[Linux入門 3-5]


3. LinuC 101 Ver .10.0(問題、テスト、演習)

フィルタを使ったテキストストリームの処理

catコマンド

ファイルの中身を標準出力に表示するコマンド

[root@52793acd2b0f test]# cat test.txt 
apple
lemon

grape


ABCDE
[root@52793acd2b0f test]# cat -n test.txt 
     1	apple
     2	lemon
     3	
     4	grape
     5	
     6	
     7	ABCDE
[root@52793acd2b0f test]# cat -b test.txt 
     1	apple
     2	lemon

     3	grape


     4	ABCDE

cutコマンド

ファイルから一部を抽出して出力するコマンド

[root@52793acd2b0f test]# cat test.txt 
1,apple
2,lemon
3,grape
[root@52793acd2b0f test]# cut -c 1 test.txt 
1
2
3
[root@52793acd2b0f test]# cut -c 1-3 test.txt 
1,a
2,l
3,g
[root@52793acd2b0f test]# cut -d , -f 2 test.txt 
apple
lemon
grape
[root@52793acd2b0f test]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@52793acd2b0f test]# cut -d : -f 1-4 /etc/passwd
root:x:0:0
bin:x:1:1
daemon:x:2:2
adm:x:3:4
lp:x:4:7
sync:x:5:0
shutdown:x:6:0
halt:x:7:0
mail:x:8:12
operator:x:11:0
games:x:12:100
ftp:x:14:50
nobody:x:99:99
systemd-network:x:192:192
dbus:x:81:81

expandコマンド, unexpandコマンド

テキスト内のタブをスペースに変換するコマンド
行頭のスペースをタブに変換するコマンド

[root@52793acd2b0f test]# cat test.txt 
1	apple
2	lemon
3	grape
[root@52793acd2b0f test]# expand -t 1 test.txt 
1 apple
2 lemon
3 grape
[root@52793acd2b0f test]# unexpand -t 8 test1.txt 
1	apple
2	lemon
3	grape

lessコマンド

ファイルの中身を閲覧するコマンド

[root@52793acd2b0f test]# less test1.txt
1       apple
2       lemon
3       grape
test1.txt (END)

fmtコマンド

テキストを決められた桁に整形する

[root@52793acd2b0f test]# cat test.txt 
I              Like     an        apple  .
[root@52793acd2b0f test]# fmt -u test.txt 
I Like an apple .

prコマンド

印刷用にファイルの書式を整形する

[root@52793acd2b0f test]# pr -h "////PRINT////" /etc/passwd | less
2020-11-13 01:55                  ////PRINT////                   Page 1


root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin

headコマンド, tailコマンド

ファイルを先頭から表示する
指定したファイルの末尾から表示

[root@52793acd2b0f test]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@52793acd2b0f test]# tail -n 2 /etc/passwd
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin

sedコマンド

ファイルの編集を行うコマンド

[root@52793acd2b0f test]# cat test.txt 
1,apple
2,lemon
3,grape
4,apple
5,orange
[root@52793acd2b0f test]# sed s/a/AAA/ test.txt 
1,AAApple
2,lemon
3,grAAApe
4,AAApple
5,orAAAnge

sortコマンド

ファイルの行の並び替えをする

[root@52793acd2b0f test]# cat test.txt 
2,apple
11,lemon
4,grape
1,apple
9,orange
[root@52793acd2b0f test]# sort test.txt 
1,apple
11,lemon
2,apple
4,grape
9,orange
[root@52793acd2b0f test]# sort -n test.txt 
1,apple
2,apple
4,grape
9,orange
11,lemon

uniqコマンド

sortコマンドと併用することで効果発動!!
ソート済みの文字列から重複行を調べて、削除して取り出す

[root@52793acd2b0f test]# cat test.txt 
111
P@ssw0rd
222
p@ss
333
pass
111
p@ss
222
[root@52793acd2b0f test]# uniq test.txt 
111
P@ssw0rd
222
p@ss
333
pass
111
p@ss
222
[root@52793acd2b0f test]# sort test.txt | uniq
111
222
333
P@ssw0rd
p@ss
pass

splitコマンド

ファイルを分割するコマンド

[root@52793acd2b0f split]# for i in `seq 1000` ;do echo $i; done
1
2
3
.
.
.
999
1000
[root@52793acd2b0f split]# for i in `seq 1000` ;do echo $i >> aaa.txt; done
[root@52793acd2b0f split]# mkdir bk
[root@52793acd2b0f split]# split -100 aaa.txt bk/bbb.
[root@52793acd2b0f split]# ls bk
bbb.aa  bbb.ab  bbb.ac  bbb.ad  bbb.ae  bbb.af  bbb.ag  bbb.ah  bbb.ai  bbb.aj

diffコマンド

[root@52793acd2b0f diff]# cat a.txt 
apple
lemon
grape
orange
pen
[root@52793acd2b0f diff]# cat b.txt 
apple
lemon
grape
orange
test
[root@52793acd2b0f diff]# diff a.txt b.txt 
5c5
< pen
---
> test

ストリーム、パイプ、リダイレクトの使用

  • ストリーム: キーボードやファイルからプログラムへのデータの入力、プログラムからディスプレイやファイルへのデータの出力などのデータの流れのこと
  • 標準入力: プログラムへの入力ストリーム
  • 標準出力: プログラムからの出力ストリーム
  • 標準エラー出力: プログラムからのエラーメッセージの出力
番号 入出力名 デフォルト
0 標準入力 キーボード
1 標準出力 画面(端末)
2 標準エラー出力 画面(端末)

image.png

パイプ(|)

1つ目のコマンドの標準出力を2つ目のコマンドに渡す(コマンドA | コマンドB)

[root@c6140de26466 3]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

/dev/null

簡単にいうと、ゴミ箱のこと。
スペシャルファイルの1つで、そこに書き込まれたデータを全て捨て(writeシステムコールは成功する)、読み出してもどんなプロセスに対してもデータを返さない

tee

標準出力を画面表示とファイルへの書き込み両方行う

[root@c6140de26466 3]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@c6140de26466 3]# cat /etc/passwd | grep root | tee root.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@c6140de26466 3]# cat root.txt 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

コマンド > ファイル名

標準出力をファイルに上書きして書き込み(リダイレクト)

[root@c6140de26466 3]# echo ABC > test.txt
[root@c6140de26466 3]# cat test.txt 
ABC
[root@c6140de26466 3]# echo DEF > test.txt
[root@c6140de26466 3]# cat test.txt 
DEF

コマンド >> ファイル名

標準出力をファイルに追記(リダイレクト)

[root@c6140de26466 3]# echo DEF >> test.txt 
[root@c6140de26466 3]# cat test.txt 
ABC
DEF

コマンド < ファイル名

ファイルを入力としてコマンドに渡す

[root@c6140de26466 3]# cat test.txt 
taro
jiro
saburo
hanako
[root@c6140de26466 3]# grep jiro < test.txt 
jiro
[root@c6140de26466 3]# grep -v jiro < test.txt 
taro
saburo
hanako

コマンド << 文字列

指定した文字列が入力されるまで、標準入力を行う

[root@c6140de26466 3]# grep hello << EOF
> a
> aaa
> goodbye
> thankyou
> hello
> bye
> hello world
> konnichiwa
> EOF
hello
hello world

コマンド 2> ファイル名

標準エラー出力をファイルに書き込む

[root@c6140de26466 3]# echo ABC
ABC
[root@c6140de26466 3]# ech ABC
bash: ech: command not found
[root@c6140de26466 3]# ech ABC > error.txt
bash: ech: command not found
[root@c6140de26466 3]# cat error.txt 
[root@c6140de26466 3]# ech ABC 2> error.txt 
[root@c6140de26466 3]# cat error.txt 
bash: ech: command not found

コマンド 2>> ファイル名

標準エラー出力をファイルに追記

[root@c6140de26466 3]# ech hello
bash: ech: command not found
[root@c6140de26466 3]# ech hello 2>> error.txt 
[root@c6140de26466 3]# cat error.txt 
bash: ech: command not found
bash: ech: command not found

1>&2

標準出力を標準エラー出力に渡す(あんまり使わない)

[root@c6140de26466 3]# ./sample.sh > log.txt 1>&2
/home/3
./sample.sh: line 4: echoo: command not found
[root@c6140de26466 3]# cat log.txt

コマンド > ファイル 2>&1

標準出力と標準エラー出力をファイルに書き込む

[root@c6140de26466 3]# cat sample.sh 
#!/bin/bash
echo `pwd` #標準出力
echoo `pwd` #標準エラー出力
[root@c6140de26466 3]# ./sample.sh 
/home/3
./sample.sh: line 4: echoo: command not found
[root@c6140de26466 3]# ./sample.sh > log.txt 2>&1
[root@c6140de26466 3]# cat log.txt 
/home/3
./sample.sh: line 4: echoo: command not found

コマンドA | コマンドB

コマンドAの標準出力をコマンドBの入力にする

[root@c6140de26466 3]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

xargs

標準入力から読み込んだ内容をコマンドの引数に変換して渡す
|xargs –I○○ コマンド ○○ # -Iですると引数を別名で渡すことができる

[root@c6140de26466 3]# touch ex1 ex2 ex3
[root@c6140de26466 3]# vi rm_file.txt
[root@c6140de26466 3]# cat rm_file.txt 
ex1
ex2
[root@c6140de26466 3]# cat rm_file.txt | rm
rm: missing operand
Try 'rm --help' for more information.
[root@c6140de26466 3]# cat rm_file.txt | xargs rm
[root@c6140de26466 3]# ll
total 4
-rw-r--r-- 1 root root 0 Jan  1 13:12 ex3
-rw-r--r-- 1 root root 8 Jan  1 13:13 rm_file.txt

To Be Continued...
[Linux入門 3-7] へ


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?