LinuCレベル1 101試験の例題と解説

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

今回は、101試験の試験範囲から、「1.03.4 正規表現を使用したテキストファイルの検索」についての例題を解いてみます。
sedコマンドを使ったデータの操作について確認しておきましょう。

Linucレベル1 101試験 出題範囲


例題

以下のテキストファイル test.txt の中に書かれている「level」という文字をすべて「Level」に置き換えるためのコマンドで正しいものを1つ選択してください。

[test.txt]
test    level1 level2 level3 level4 level5
test2   level1 level2 level3 level4 level5
  1. sed s/level/Level/ test.txt
  2. sed s/level/Level/g test.txt
  3. sed y/level/Level/ test.txt
  4. sed y/level/Level/g test.txt

※この例題は実際の試験問題とは異なります。


解答と解説

正解は、「2. sed s/level/Level/g test.txt」です。

sedコマンドはテキストストリームに対して変換を行うためのコマンドです。
ファイルやテキストデータで特定の文字を一度に変換した場合などに便利です。

sed コマンドでは以下の書式で利用できます。

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

sedコマンドの主なオプションは以下の通りです。

-f ファイル … コマンドが書かれたスクリプトファイルを指定する

sedコマンド内で指定できる主なコマンドは以下の通りです。

d… マッチした行を削除する
s… パターンに基づいて置換する。gスイッチを使うと、マッチ箇所をすべて置換する。
y… 文字を置換する

例題にあるように、単語などの検索パターンにマッチする部分を置換パターンに置き換えるには「s/検索パターン/置換パターン」を指定します。
コマンドの説明にある通り、マッチ箇所をすべて置換するにはgスイッチを利用します。
よって正解は「2. sed s/level/Level/g test.txt」となります。

選択肢の解説は以下です。

1.sed s/level/Level/ test.txt
誤りです。
gスイッチが指定されていないため、各行で最初にマッチした部分だけが置換されます。選択肢1のコマンドを実行した場合、最初にマッチした「level」だけが置換され、以下のように出力されます。

test    Level1 level2 level3 level4 level5
test2   Level1 level2 level3 level4 level5

2.sed s/level/Level/g test.txt
正解です。
sコマンドとgスイッチを利用することで、検索パターンをすべて指定したパターンに置換できます。
選択肢2のコマンドを実行した場合、以下のように出力されます。

test    Level1 Level2 Level3 Level4 Level5
test2   Level1 Level2 Level3 Level4 Level5

3.sed y/level/Level/ test.txt
誤りです。
yコマンドを利用すると、検索文字を1文字ずつ検査し、マッチする文字があった場合、その文字の同じ位置の文字に置き換えます。
選択肢3のコマンドを実行した場合、lが大文字に変換されるため、以下のように出力されます。

test    LeveL1 LeveL2 LeveL3 LeveL4 LeveL5
test2   LeveL1 LeveL2 LeveL3 LeveL4 LeveL5

4.sed y/level/Level/g test.txt
誤りです。
yコマンドとgスイッチは併用できません。
選択肢4のコマンドを実行した場合は、形式エラーになります。

yコマンドとgスイッチは併用できません。
選択肢4のコマンドを実行した場合は、形式エラーになります。

sedコマンドはファイル内の単語を一括置換したい場合や、ある行数をまとめてコメントアウトにしたい場合などに便利です。
ただし使い方を正しく把握していないと、想定していた部分と違う部分が置換されてしまったり、置換したい部分が変換されていなかったりする可能性があります。
使い方と動きを確かめながら、確実に使えるようにしていきましょう。


例題作成者

株式会社デージーネット OSS研究室 橋本知里

ページトップへ