ストリーム エディターの概要

完了

ストリーム エディター (sed) は、テキストの解析と操作に役立つ便利なツールです。 標準入力またはファイルからテキストを取得して変換するのに使用できます。 sed ツールでは、非対話的な方法でテキストを行ごとに編集します。 この方法では、コマンドを呼び出しながら判断していきます。 これらの指示は自動的に実行されます。 この機能により、sed はテキストを変換するための強力で高速なツールになります。

基本的な使用方法

sed ツールを使って、stdin またはファイルからテキストを取得して操作します。 この動作により、別のコマンドの出力を sed ツールに直接送って編集することができます。 以前に作成または編集したファイルから作業することもできます。

sed コマンドは、既定ではすべて stdout に出力されることに注意してください。 編集したテキストを保存する場合は、> コマンドの場合と同様に、リダイレクト演算子 (cat) を使って出力をリダイレクトする必要があります。

sed の基本的な使用方法は sed [options] commands [file-to-edit] です。

  • NASA-software-API.txtファイルで次の基本的なsed コマンドを試してください。

    sed '' NASA-software-API.txt
    

このコマンドは、stdout コマンドで見たのと同じように、ファイルの内容を cat に出力します。 単一引用符には、sed コマンドへの編集指示を含めます。 この場合、編集の指示は何も渡していないので、コマンドは受け取った各行をターミナルに出力します。

sed ツールは、ファイルではなく stdin からの入力に対して動作し、コマンドからの出力を保存することもできます。

sed を使用したテキスト置換

おそらく、テキスト置換が sed ツールの使用法として最もよく知られています。 先ほど説明したように、sed コマンドでは、正規表現を使用してテスト パターンを検索できます。 それだけでなく、このツールは一致したテキストを別のものに置き換えることもできます。

テキスト置換の一般的な構文は sed s'/old_text/new_text/' です。文字 ssubstitute (置換) を意味する編集指示で、スラッシュ (/) は置換で使うテキストを区切ります。

URL https://www.nasa.gov/about/sites/index.html があり、URL の index.html の部分をテキスト home に置き換えたいとします。

  • この置換は、次の sed コマンドを使って行います。

    echo "https://www.nasa.gov/about/sites/index.html" | sed s'/index.html/home/'
    

    変更された URL が出力に表示されます。

    https://www.nasa.gov/about/sites/home
    

NASA-software-API.txt ファイル内のコンテンツに対していくつかの置換操作を試してみましょう。

"NASA" という略語を "National Aerospace Agency" という正式な名称に置き換えます。置換を行う前に、"NASA" という略語のインスタンスの数をカウントします。sed ツールを実行した後、カウントを確認してすべてのインスタンスが置換されたことを確認します。

  1. NASA-software-API.txt ファイルを Cloud Shell エディターで開きます。

    code NASA-software-API.txt
    
  2. 統合エディターの検索ボックスを開き、文字列 NASA を入力します。

    検索ボックスの結果には、"NASA" という略語に 27 件の一致が表示されます。

    ヒント

    Cloud Shell エディターで使う領域を減らすために、エディターとターミナルを分離するコンテンツ分割バーを使用できます。 この調整を行うと、ターミナルでコマンド出力を見るためのスペースが広くなります。

  3. 次に、sed コマンドを実行して置換を行います。

    sed 's/NASA/National Aerospace Agency/' NASA-software-API.txt
    

    "NASA" のすべての一致で置換が行われますが、コマンドはファイルのすべての行をターミナル (stdout) に出力することに注意してください。 これは、sed ツールの既定の動作です。

    置換が適用された行だけを出力するには、-n フラグを使います。 また、編集指示で p オプションを渡すと、自動出力を抑制することができます。

  4. もう一度 sed コマンドを実行し、パターン置換が適用された行だけを出力します。

    sed -n 's/NASA/National Aerospace Agency/p' NASA-software-API.txt
    

    今回は -n フラグと p オプションを使っているので、出力が少なくなっています。

ファイルに書き込む

sed ツールの最も一般的な使い方の 1 つは、解析または編集操作の結果をキャプチャすることです。 前の例では、コマンドの結果を確認する能力には限界がありました。 ターミナルに表示されるコマンドの出力しか見ることができなかったのです。

この問題を解決するために、sed コマンドの 3 番目の区切り記号の後に使用できる別のフラグがあります。 w フラグでは、コマンドから変更されたデータを受け取るファイルを指定できます。

もう一度、先ほどのコマンドを試してみましょう。 今回は、sed コマンドで変更された内容をすべて新しいファイルに書き込みます。

  1. sed コマンドを実行して、置き換えられた行のみを印刷し、変更したデータを新しいファイル (NASA-replaced.txtなど) に送信します。

    sed -n 's/NASA/National Aerospace Agency/w NASA-replaced.txt' NASA-software-API.txt
    
  2. ls を実行すると、ディレクトリに新しいファイルが表示されます。

    file1    file2    NASA-logs-1995.txt    NASA-replaced.txt    NASA-software-API.txt
    
  3. 新しいファイルを Cloud Shell エディターで開きます。

    新しいファイルには 26 行のコンテンツがあります。

課題

検索ボックスを使って新しいファイル内で文字列 "NASA" を探すと、この略語のインスタンスが 1 つ残っていることに気がつきます。 sed コマンドの呼び出しでは、26 個の置換が行われただけです。

NASA-software-API.txt ファイル内の 1 つの行に、"NASA" の省略形が 2 つありました。 sed コマンドを呼び出すと、最初のインスタンスが正常に置換されました。 "NASA" の 2 つ目のインスタンスは "NASAViz" という用語に含まれています。

確認したコマンドを使って、この最終的な置換を行うことができますか?