LinuC レベル1 Version10.0
技術解説無料セミナー
2021/6/26 開催
主題

1.03 GNUとUnixのコマンド

副題

1.03.2 フィルタを使ったテキストストリームの処理
1.03.3 ストリーム、パイプ、リダイレクトの使用
1.03.4 正規表現を使用したテキストファイルの検索

本日の講師

三澤 康巨
© LPI-Japan / EDUCO all rights reserved.

本日の講師#LinuC学習中

三澤 康巨◼KDDI株式会社で、電話等のネットワークサービス設備のエンジニアリングをはじめ様々な業務を担当しました。
◼2017年10月から2年半、KDDIグループ内のサーバ研修講師を務めました。
◼サーバ研修受講者の中から、200名を超える LinuC レベル1 合格者を出しました。
◼2020年3月、KDDIを定年退職しました。
◼LinuCレベル1技術解説セミナーの講師を担当
 2020年7月18日「ブートプロセスとsystemd」
 2021年1月23日「ハードディスクのレイアウトとパーティション」
 2021年3月 6日「ファイルシステムの作成と管理、マウント」◼その他
 2020年11月28日、オープンソースカンファレンス２０２０ オンライン/福岡「Linuxマシンを作ってみよう ～LinuC レベル１／レベル２ 学習環境構築ガイド～」の講師を担当© LPI-Japan all rights reserved.

2

LinuCレベル１／レベル２ Version10.0とは#LinuC学習中◼LinuCとはクラウド時代の即戦力エンジニアであることを証明するLinux技術者認定✓現場で「今」求められている新しい技術要素に対応• オンプレミス／仮想化・コンテナを問わず様々な環境下でのサーバー構築• 他社とのコラボレーションの前提となるオープンソースへの理解• システムの多様化に対応できるアーキテクチャへの知見✓全面的に見直した「今」身につけておくべき技術範囲を網羅
今となっては使わない技術やコマンドの削除、アップデート、新領域の取り込み✓Linuxの範疇だけにとどまらない領域までカバー
セキュリティや監視など、ITエンジニアであれば必須の領域もカバー© LPI-Japan all rights reserved.

3

クラウドを活用できるITエンジニアに必須の技術がまとまっている#LinuC学習中
AWSなどのパブリッククラウドを活用するための技術

AWSなどのパブリッククラウドを活用するための技術間が欠けている状態

仮想マシン／コンテナ技術、クラウドセキュリティ、アーキテクチャ、ほかオンプレミスのサーバーサイドLinux技術

オンプレミスのサーバーサイドLinux技術【今まで／その他】

Version10.0© LPI-Japan all rights reserved.

4本日の内容#LinuC学習中

テキストデータ処理
1.はじめに2.ストリームとリダイレクト、パイプ3.フィルタの利用1（tee、xargs、wc）
4.フィルタの利用2（正規表現、sed）© LPI-Japan all rights reserved.

5

#LinuC学習中

1.はじめに2.ストリームとリダイレクト、パイプ3.フィルタの利用1（tee、xargs、wc）
4.フィルタの利用2（正規表現、sed）© LPI-Japan all rights reserved.

6

はじめに

#LinuC学習中◼2020年11月29日に開催されたLinuC技術解説セミナー「GNUとUnixのコマンド」において、講師の木村様から主題1.03の全体を網羅する解説がありました。
◼本セミナーでは、同じ主題1.03の中から、「テキストデータ処理」に注目して詳しく解説します。3つの副題に関係しますが、各々を網羅するのではなく、それらの要素を横断的に組み合わせて、効率的にテキストデータを処理する技術を説明します。
◼学習効果を高めるため、実行例の出てくる部分では、ご自分でも実行してみることをお勧めします。

◼Linuxには多数のディストリビューションが存在しますが、本セミナーの実行例では、CentOS 7 を使用します。
• ビジネス用サーバーの多くで稼働している Red Hat Enterprise Linux 7 (RHEL7) と互換性があります。
• RHEL7は有料ですが、CentOS 7 は無料で利用できます。
• CentOSとRHELの最新バージョンは「8」ですが、本セミナーでは、普及が進んでいるバージョン「7」を使います。
© LPI-Japan all rights reserved.

7

はじめに

#LinuC学習中◼CentOS 7 に基づく学習環境の構築方法を、LPI-Japanのサイトでご紹介しています。
LinuC レベル１／レベル２ Version 10.0 学習環境構築ガイドhttps://linuc.org/docs/v10/guide_text.pdf◼学習環境構築ガイドでは、2種類の環境の構築方法を紹介しています。
【環境A】• 用意したコンピュータの内蔵ストレージを上書きして、Linux専用コンピュータを構築します。
• WindowsやMacOS等の既存OSは使えなくなります。
• 不要になった古いPC等がある場合に、それを使ってください。
【環境B】• WindowsやMacOS等の既存OSを壊すことなく、外付けSSDにLinuxをインストールします。
• これによって、既存OSとLinuxとの間を切り替えて利用することができます。
• 但し、既存OSとLinuxとを同時に利用することはできません。

© LPI-Japan all rights reserved.

8

はじめに – ３つの副題と解説範囲
副題

重要度

1.03.2フィルタを使ったテキストスト
リームの処理3#LinuC学習中

詳細2020/11/29
本セミナー
コマンド等 セミナー
cat
○
cut○
expandunexpand
fmt
head○
join○
less
テキストファイルやストリームの出力をテキス nl•テキストストリー
トユーティリティフィルタに送り込み出力を変ムにフィルタを適od更するためのGNU textutilsパッケージに含ま用できる。
paste○
れる標準的なUNIXコマンドを使用できる。
prsed○
○
sort○
split
○
tail○
tr○
uniq
○
wc
○
概要

詳細
出題内容

© LPI-Japan all rights reserved.

9はじめに – ３つの副題と解説範囲
副題

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

重要度

4

概要

詳細
出題内容

#LinuC学習中
詳細2020/11/29
本セミナー
コマンド等 セミナー

•テキストデータを<効果的に処理するためにストリームのリダイレクトや>接続ができる。
•この作業には標準 •標準入力、標準出力、標準エラー出力をリダ入力、標準出力、 イレクトする。
>>
標準エラー出力へのリダイレクト、あるコマンドの出2>&1
力を別のコマンドの入力にパイプする、あるコマンド •あるコマンドの出力を別のコマンドの入力に | (縦線)の出力を別のコマ パイプする。
ンドの引数として使用する、出力を •あるコマンドの出力を別のコマンドの引数と xargs
標準出力とファイ して使用する。
ルの両方に送るといったことが含ま •出力を標準出力とファイルの両方に送る。
teeれる。

○（○）

○（○）

○

（○）

○

（○）

○

（○）

○○

© LPI-Japan all rights reserved.

10はじめに – ３つの副題と解説範囲
副題

1.03.4
正規表現を使用
したテキストファイルの検索重要度

概要

2

正規表現を使用してファイルおよびテキストデータを操作できる。これには、いくつかの表記要素を含む単純な正規表現の作成も含まれる。また、正規表現ツールを使用して、ファイルシステムまたはファイルの内容からの検索を実行することも含まれる。

詳細
出題内容

#LinuC学習中
詳細2020/11/29
本セミナー
コマンド等 セミナー

sed○

○

regex(7)○（○）

grep

○（○）

（○）

（○）

•いくつかの表記要素を含む単純な正規表現を作成する。

•正規表現ツールを使用して、ファイルシステ
egrep
ムまたはファイルの内容からの検索を実行する。

fgrep© LPI-Japan all rights reserved.

11

#LinuC学習中

1.はじめに2.ストリームとリダイレクト、パイプ
3.フィルタの利用1（tee、xargs、wc）
4.フィルタの利用2（正規表現、sed）© LPI-Japan all rights reserved.

12

ストリームと標準入出力（復習）#LinuC学習中◼コマンドを中心としたテキストデータの流れを「ストリーム」と呼びます。
◼コマンドへ入ってくるストリームを「標準入力」と呼びます。デフォルトの標準入力元はキーボードです。
◼コマンドから出ていくストリームには２種類あり、正常なコマンド出力を「標準出力」、コマンドのエラーメッセージ出力を「標準エラー出力」と呼びます。いずれも、デフォル
トの出力先は 端末画面です。

コ

標準入力（0）標準出力（1）

マン
ド

標準エラー出力（2）ストリームの種類© LPI-Japan all rights reserved.

13

リダイレクト（復習）#LinuC学習中◼ストリームの入力元や出力先をファイルへ切り換えることを「リダイレクト」といいます。
◼リダイレクトを指示するには、 > 、 >> 、 < 、 << といった記号を使用します。
◼標準エラー出力を標準出力と同じ出力先にリダイレクトするには、 2>&1 と指示します。

> 、 >>

コ<マン
ド2> 、 2>> 、 2>&1

リダイレクト© LPI-Japan all rights reserved.

14

パイプ（復習）#LinuC学習中◼コマンドの標準出力を別のコマンドの標準入力として引き渡すことを「パイプ」といいます。
◼パイプを指示するには、記号 | を使用します。

コ|

標準出力

マ

標準入力

コ
マン

ン

ドド

１

標準エラー出力２

パイプ© LPI-Japan all rights reserved.

15

#LinuC学習中

1.はじめに2.ストリームとリダイレクト、パイプ

3.フィルタの利用1（tee、xargs、wc）
4.フィルタの利用2（正規表現、sed）© LPI-Japan all rights reserved.

16

teeコマンド#LinuC学習中◼teeコマンドは、標準入力から受け取ったデータを端末画面とファイルの両方に出力します。
◼teeコマンドを使用すると、コマンドの標準出力を端末画面とファイルの両方に出力することができます。

コマン
ドtee

© LPI-Japan all rights reserved.

17

teeコマンド#LinuC学習中

tee コマンドtee [オプション] ファイル名

オプション

説 明-a

ファイルに追記する（デフォルトは上書き）

teeコマンドの実行例$ ls -l /etc/*.conf | tee cmdlog-rw-r--r--. 1 root root 1704 8月 13-rw-r--r--. 1 root root
55 8月 8-rw-r--r--. 1 root root 21929 4月 11・・・

2019 /etc/GeoIP.conf
2019 /etc/asound.conf
2018 /etc/brltty.conf$ cat cmdlog-rw-r--r--. 1 root root 1704-rw-r--r--. 1 root root55
-rw-r--r--. 1 root root 21929
・・・

2019 /etc/GeoIP.conf
2019 /etc/asound.conf
2018 /etc/brltty.conf

8月 13
8月 8
4月 11

© LPI-Japan all rights reserved.

18

xargsコマンド#LinuC学習中◼xargsコマンドは、標準入力から受け取ったデータを、指定したコマンドに引数として引き渡します。
xargs コマンド
xargs 実行コマンド

xargs

実行コマンド 引数© LPI-Japan all rights reserved.

19

xargsコマンド#LinuC学習中

xargsコマンドの実行例$ find /etc -type f -mtime +5000 2> /dev/null | xargs ls -l-rw-r--r--. 1 root root 6816 3月 27 2007 /etc/postfix/relocated-rw-r--r--. 1 root root 653 11月 2 2006 /etc/xdg/menus/documentation.menu-rw-r--r--. 1 root root 1370 11月 2 2006 /etc/xdg/menus/settings.menu-rw-r--r--. 1 root root 920 10月 4 2003 /etc/xdg/menus/start-here.menu© LPI-Japan all rights reserved.

20

wcコマンド#LinuC学習中◼wcコマンドは、指定したファイル内の行数、単語数、文字数を表示します。
◼ファイル名を省略すると、標準入力から受け取って処理します。
wc コマンドwc [オプション] [ファイル名]
オプション

説明

-l

行数を表示する-w

単語数を表示する-c

文字数（バイト数）を表示する

なし

行数、単語数、文字数を表示する© LPI-Japan all rights reserved.

21

wcコマンド#LinuC学習中

wcコマンドの実行例$ wc /etc/services
11176 61033 670293 /etc/services$ wc -l /etc/services
11176 /etc/services$ ls -l /etc | grep ^d | wc -l143※/etc内にあるディレクトリを数える© LPI-Japan all rights reserved.

22

#LinuC学習中

1.はじめに2.ストリームとリダイレクト、パイプ
3.フィルタの利用1（tee、xargs、wc）

4.フィルタの利用2（正規表現、sed）© LPI-Japan all rights reserved.

23正規表現（復習）#LinuC学習中◼正規表現を利用すると、文字列を柔軟に検索することができます。
◼grepコマンドとsedコマンドの検索条件に正規表現を使用することができます。
主な正規表現説^

明

主な正規表現説

明

行頭[文字・・・][]内のいずれか1文字$

行末[文字-文字][]内の範囲のいずれか1文字.

任意の1文字[^文字・・・][]内に含まれない1文字*

直前の文字の0回以上の繰り返し＼

直後の文字の正規表現を打ち消す◼拡張正規表現は、egrepコマンド 、 grepコマンド の -Eオプション または sedコマンドの -rオプション で使用することができます。
主な拡張正規表現説

明+

直前の文字の1回以上の繰り返し?

直前の文字1個または0個

文字列1|文字列2

文字列1 または 文字列2
© LPI-Japan all rights reserved.

24

sedコマンド#LinuC学習中◼sed (Stream EDitor) コマンドは、ストリームを様々に編集して表示する、強力なツールです。-iオプションを指定しない限り、入力ファイルは変更されません。
◼ファイル名を省略すると、標準入力から受け取って処理します。
sed コマンドsed [オプション] 編集コマンド [ファイル名]
オプション

説

-i

編集結果でファイルを上書きする-e 編集コマンド1 -e 編集コマンド2 ・・・

複数の編集コマンドを指定する-f ファイル名指定したスクリプトファイルから編集コマンドを受け取る-r 編集コマンド

編集コマンドに拡張正規表現を使用する

編集コマンド説[行指定]s/検索文字列/置換文字列/[g]検索文字列を置換文字列に置き換える

行指定d

指定した行を削除する[行指定]y/検索文字・・・/置換文字・・・/

各検索文字を同じ位置の置換文字に置き換える※ 行指定を「アドレス」とも呼びます。

明

明© LPI-Japan all rights reserved.

25

sedコマンド#LinuC学習中

行指定（アドレス）説 明m,nm行目からn行目までm,$m行目から最後の行まで/文字列/指定した文字列を含む行（文字列には正規表現を使用できる）◼sコマンドによる文字列の置換では、行内に検索文字列が複数ある場合、最初の文字列だけが置換されます。行内の全ての検索文字列を置換するには、置換文字列の後ろに g を指定します。
◼検索文字列には正規表現を使用できます。
編集コマンド

説明[行指定]s/検索文字列/置換文字列/行内の最初の検索文字列を置換文字列に置き換える[行指定]s/検索文字列/置換文字列/g

行内の全ての検索文字列を置換文字列に置き換える© LPI-Japan all rights reserved.

26

sedコマンド#LinuC学習中

行を削除$ cat -n /etc/rsyslog.conf
1 # rsyslog configuration file2
3 # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
4 # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
5
6 #### MODULES ####
7
8 # The imjournal module bellow is now used as a message source instead of imuxsock.
・・・$ cat -n /etc/rsyslog.conf | sed '3,7d'
1 # rsyslog configuration file2
8 # The imjournal module bellow is now used as a message source instead of imuxsock.
・・・$ cat -n /etc/rsyslog.conf | sed '3,$d'
1 # rsyslog configuration file2

© LPI-Japan all rights reserved.

27

sedコマンド#LinuC学習中行を削除（正規表現を使用）$ cat /etc/rsyslog.conf
・・・# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)$ModLoad imjournal # provides access to the systemd journal#$ModLoad imklog # reads kernel messages (the same are read from journald)・・・$ cat /etc/rsyslog.conf | sed '/^ *#/d' > rsyslog.mod※コメント行を削除してファイルに保存$ cat rsyslog.mod$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)$ModLoad imjournal # provides access to the systemd journal・・・© LPI-Japan all rights reserved.

28

sedコマンド#LinuC学習中文字列を置換$ cat -n /etc/rsyslog.conf
1 # rsyslog configuration file2
3 # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
・・・$ cat -n /etc/rsyslog.conf | sed 's/[lL]og/LOG/'※行内の最初の検索文字列を置換
1 # rsysLOG configuration file2
3 # For more information see /usr/share/doc/rsysLOG-*/rsyslog_conf.html
・・・$ cat -n /etc/rsyslog.conf | sed 's/[lL]og/LOG/g'※行内の全ての検索文字列を置換
1 # rsysLOG configuration file2
3 # For more information see /usr/share/doc/rsysLOG-*/rsysLOG_conf.html
・・・© LPI-Japan all rights reserved.

29

sedコマンド#LinuC学習中

文字列を置換（文字列を削除、挿入）$ cat /etc/rsyslog.conf# rsyslog configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
・・・$ cat /etc/rsyslog.conf | sed 's/^ *#//'
rsyslog configuration file

※文字列を削除

For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
・・・$ cat /etc/rsyslog.conf | sed 's/^ *#//' | sed 's/$/ # New Comment/'※文字列を挿入rsyslog configuration file # New Comment# New Comment
For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # New Comment
If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html # New Comment© LPI-Japan all rights reserved.
・・・
30

sedコマンド#LinuC学習中

文字列を置換（行を指定）$ cat /etc/rsyslog.conf
・・・# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html（4～9行目）#### MODULES ##### The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)・・・$ cat /etc/rsyslog.conf | sed '/^ *#/s/[lL]og/LOG/g'※行指定にも正規表現を使用
・・・# If you experience problems, see http://www.rsysLOG.com/doc/troubleshoot.html （4～9行目）#### MODULES ##### The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
・・・© LPI-Japan all rights reserved.

31

sedコマンド#LinuC学習中

複数の編集コマンドを指定$ cat /etc/rsyslog.conf | sed '/^ *#/d'$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)$ModLoad imjournal # provides access to the systemd journal・・・$ cat /etc/rsyslog.conf | sed -e '/^ *#/d' -e '/^ *$/s/^/# blank line/'# blank line
# blank line# blank line
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)$ModLoad imjournal # provides access to the systemd journal# blank line
・・・

© LPI-Japan all rights reserved.

32

sedコマンド#LinuC学習中

複数の編集コマンドを指定（スクリプトファイルを使用）$ echo '/^ *#/d' > sedscr ; echo '/^ *$/s/^/# blank line/' >> sedscr$ cat sedscr/^ *#/d/^ *$/s/^/# blank line/$ cat /etc/rsyslog.conf | sed -f sedscr# blank line
# blank line
# blank line
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)$ModLoad imjournal # provides access to the systemd journal# blank line・・・© LPI-Japan all rights reserved.

33

本セミナーのまとめ#LinuC学習中

1. CentOS 7 に基づく学習環境を自分で構築してみましょう。
2. ストリームの入力元や出力先をファイルへ切り換えることを「リダイレクト」といいます。コマンドの標準出力を別のコマンドの標準入力として引き渡すことを「パイプ」いいます。
3. teeコマンドを使用すると、コマンドの標準出力を端末画面とファイルの両方に出力することができます。xargsコマンドは、標準入力から受け取ったデータを、指定したコマンドに引数として引き渡します。wcコマンドは、指定したファイル内の行数、単語数、文字数を表示します。
4. grepコマンドとsedコマンドの検索条件に正規表現を使用することができます。
5. sedコマンドは、ストリームを様々に編集して表示する、強力なツールです。文字列の置換や特定行の削除を行うことができます。

© LPI-Japan all rights reserved.

34

#LinuC学習中

ご清聴ありがとうございました© LPI-Japan all rights reserved.

35