LinuC Level1 v10.0 対策コース(パート1)30/39
Linuxコマンド[tr/sed編]
この記事ではファイル内の文字列を置換して出力する方法について解説します。tr
コマンドとsed
コマンドはどちらも文字列を置換して出力するコマンドです。これらの使い方を学習しましょう。
trコマンド
文字列を置換して出力するためのコマンドです。指定した文字を削除したり、連続している文字を1つにまとめたりすることもできます。
書式
tr [オプション] 文字列1 文字列2
文字列1を文字列2に置き換えます。
オプション
オプション | 説明 |
---|---|
-d | 文字列1に一致する文字を削除する |
-s | 文字列1の文字が連続していたら1文字にまとめる |
-t | 文字列1が文字列2より長い場合、文字列2の長さまで切り詰めて置換を行う |
-c | 文字列1に含まれない文字全てを対象にする |
基本的な使い方
cat sample.txt
abc
123
ABC
# 「123」を「def」に置き換えます。
cat sample.txt | tr 123 def
abc
def
ABC
trコマンドでは、文字列1と文字列2の文字を順番に1対1で置き換えるので、文字列1と文字列2の長さは同じであるべきです。もし長さが異なる場合、短い方の文字列が長さを合わせるために繰り返されます。
大文字・小文字を置き換える
「A-Z」「a-z」と範囲の指定をすることで、大文字と小文字を置き換えることができます。
# アルファベットの大文字(A-Z)を小文字(a-z)に置き換えます。
cat sample.txt | tr A-Z a-z
abc
123
abc
指定した文字を削除する
-d
オプションで指定した文字を削除することができます。
# 「3」を削除します。
cat sample.txt | tr -d 3
abc
12
ABC
連続した文字を1つにする
-s
オプションで、指定した文字が連続している場合に1つにまとめることができます。
cat sample2.txt
111
222
333
# 連続した「1」を1つにします。
cat sample2.txt | tr -s 1
1
222
333
sedコマンドについて
sed
は「Stream EDitor」の略で、指定したファイルをコマンドに従って処理し出力します。
書式
sed [スクリプトコマンド] ファイル名
sed
では「アドレス」と「コマンド」の組み合わせで処理を記述します。アドレスには行番号や正規表現を使用可能です。アドレスは省略可能ですが、省略するとすべての範囲が処理の対象となります。
主な正規表現
正規表現 | 意味合い |
---|---|
.* | 0文字以上の任意の文字列に一致する |
. | 任意の1文字に一致する |
[a-z] | 'a'から'z'までの任意の小文字1文字に一致する |
[^あ-お] | 'あ'から'お'までの文字以外の任意の1文字に一致する |
(aa) | 'aa'という文字列に一致する |
aaa|bbb | 'aaa'または'bbb'という文字列に一致する |
a+ | 'a'が1回以上繰り返される部分に一致する(例: 'a'、'aa'、'aaa'など) |
\] | ']'という文字そのものに一致する(''はエスケープ文字として働く) |
主なオプション
コマンド | 説明 |
---|---|
-e | スクリプトコマンドを追加する |
-f | 実行するコマンドとしてスクリプトファイルの内容を追加する |
-i | ファイルを直接編集する |
置き換えの文字をコマンドの行内で指定する場合は「-e」オプションを使用します。
サブコマンド
sed
コマンドにはサブコマンドがあり、テキストをどのように編集するかを指定できます。
サブコマンド | 説明 |
---|---|
d | 指定した文字を削除する |
s | 指定した文字列を置き換える |
y | 指定した文字を一文字ずつ置き換える |
基本的な使い方
sed
コマンドで文字列の置き換えを行う場合は下記のように表記します。
#基本的な書き方
sed -e `s/置換前/置換後/` ファイル名
cat sample.txt
abc
123
ABC
sed -e 's/abc/def/' sample.txt
def
123
ABC
正規表現を使用して文字を置き換える
行の先頭を表す正規表現「^」を使用して文字列を指定し置き換える場合は下記のようになります。
cat sample1.txt
abcabc
123
ABCABC
# 行の先頭に位置する「abc」を「def」に置き換える
sed -e 's/^abc/def/' sample1.txt
defabc
123
ABCABC
また、アドレスを省略した場合、全ての行が処理の対象となります。
sed -e 's/^/all/' sample1.txt
allabcabc
all123
allABCABC
上記の例では置換前の文字列を省略し、全ての行が処理の対象となっています。
まとめ
今回は文字列を置き換える際に使用するtr
コマンドとsed
コマンドについて解説しました。
今回紹介した使い方以外にも様々なオプションや、別コマンドを組み合わせた使用方法がありますので、ぜひご自身でも調べてみてください。シナリオでは問題を解くのに必要なファイルの他に、練習用のファイルを用意してあります。
問題を解くためには、十分な画面サイズのPC環境をご利用下さい。