Linuxのテキストフィルタ処理~trコマンド・sedコマンド~


今回の内容

今回は、tr・sedコマンドについて解説します。

tr

文字の変換・削除や、連続する文字の圧縮を行うには、「tr」コマンドを使用します。

コマンド
意味 標準入力から読み取った文字列を変換したり、削除する。
書式 tr [オプション] [文字列1 [文字列2]]
オプション 説明
-d [文字列1]でマッチした文字列を削除。
-s 連続するパターン文字列を1文字として処理。
クラス 説明(※クラスとは、文字列のところで指定できるものです。)
[:alpha:] 英字
[:lower:] 英小文字
[:upper:] 英大文字
[:digit:] 数字
[:alnum:] 英数字
[:space:] スペース

サンプルファイルの作成
viコマンドで「sample5.txt」を作成
[root@localhost ~]# vi sample1.txt
[root@localhost ~]# cat sample1.txt
01 AAAAA abcde
02 bbbbb fghij
03 ccccc klmno
04 ddddd pqrst
05 eeeee uvwxy

★(1行目の「AAAAA」と数字以外は、小文字)

例)文字を「小文字」から「大文字」に変換
「sample5.txt」の表示結果の文字を「小文字」から「大文字」に変換。
[root@localhost ~]# cat sample5.txt | tr 'a-z' 'A-Z'
AAAA ABCDE
02 BBBBB FGHIJ
03 CCCCC KLMNO
04 DDDDD PQRST
05 EEEEE UVWXY
[root@localhost ~]#

[root@localhost ~]# cat sample5.txt | tr [:lower:] [:upper:]
AAAA ABCDE
02 BBBBB FGHIJ
03 CCCCC KLMNO
04 DDDDD PQRST
05 EEEEE UVWXY
[root@localhost ~]#


例)の文字「:」を削除
「/etc/passwd」の表示結果の文字「:」を削除
★削除前
[root@localhost ~]# 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

★削除後
[root@localhost ~]# cat /etc/passwd | tr -d :
rootx00root/root/bin/bash
binx11bin/bin/sbin/nologin
daemonx22daemon/sbin/sbin/nologin
admx34adm/var/adm/sbin/nologin
lpx47lp/var/spool/lpd/sbin/nologin
syncx50sync/sbin/bin/sync

例)「小文字」から「大文字」に変換。(連続した文字は1文字とする)
「sample5.txt」の表示結果の文字を「小文字」から「大文字」に変換。(連続した文字は1文字とする)
[root@localhost ~]# cat sample5.txt | tr -s [:lower:] [:upper:]
A ABCDE
02 B FGHIJ
03 C KLMNO
04 D PQRST
05 E UVWXY
[root@localhost ~]#

sed

標準入力からのテキストストリームをフィルタ処理して、標準出力へ渡すには、「sed」コマ
ンドを使用します。

コマンド
書式

sed [オプション] ‘コマンド‘ [ファイル]

sed [オプション] -e‘コマンド1‘ [-e‘コマンド2‘ …] [ファイル]

sed [オプション] -f スクリプトファイル [ファイル]

編集コマンド 説明
d マッチした行を削除する。
s パターンに基づいて置換する。
y 文字を置換する。
オプション 説明
-e 次の引数はコマンドとして認識する。
-f 次の引数はスクリプトファイルと認識する。
-g パターンに最初からマッチした文字列だけでなく、全てのマッチする文
字列を置き換える。
例)1~5行目を削除して表示。
「/etc/passwd」ファイルの内容の1~5行目を削除して表示。(一部省略)
[root@localhost ~]# cat -n /etc/passwd | sed -e '1,5d'
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin

(省略)


例)「bin」を「—–」に変換して表示
)「/etc/passwd」ファイルの内容の「bin」を「—–」に変換して表示。(一部省略)
★置換前
[root@localhost ~]# cat -n /etc/passwd
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync

★置換後
[root@localhost ~]# cat -n /etc/passwd | sed -e 's/bin/-----/g'
     1  root:x:0:0:root:/root:/-----/bash
     2  -----:x:1:1:-----:/-----:/s-----/nologin
     3  daemon:x:2:2:daemon:/s-----:/s-----/nologin
     4  adm:x:3:4:adm:/var/adm:/s-----/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/s-----/nologin
     6  sync:x:5:0:sync:/s-----:/-----/sync

まとめ

tr・sedコマンドの実行結果しっかり覚えておきましょう!
それでは今回はこのあたりで。

確認問題

問題1

文字の変換・削除や、連続する文字の圧縮を行うコマンドで、正しい選択肢を1つ選びなさい。

A) paste
B) touch
C) tr
D) cd

解答・解説
問題2

標準入力からのテキストストリームをフィルタ処理して、標準出力へ渡すコマンドで、正しい選択肢を1つ選びなさい。

A) sed
B) mkdir
C) echo
D) sort

解答・解説
  • このエントリーをはてなブックマークに追加

PAGE TOP