LinuCレベル1 101試験の例題と解説
1.03.4正規表現を使用したテキストファイルの検索
今回は、101試験の試験範囲から、「1.03.4 正規表現を使用したテキストファイルの検索」についての例題を解いてみます。
sedコマンドを使ったデータの操作について確認しておきましょう。
例題
以下のテキストファイル test.txt の中に書かれている「level」という文字をすべて「Level」に置き換えるためのコマンドで正しいものを1つ選択してください。
[test.txt]
test level1 level2 level3 level4 level5
test2 level1 level2 level3 level4 level5
- sed s/level/Level/ test.txt
- sed s/level/Level/g test.txt
- sed y/level/Level/ test.txt
- 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研究室 橋本知里