Sed-special-characters
ストリームエディター-特殊文字
SEDは、コマンドとして扱われる2つの特殊文字を提供します。 この章では、これら2つの特殊文字の使用法を説明します。
=コマンド
「=」コマンドは行番号を扱います。 「=」コマンドの構文は次のとおりです。
=コマンドは、行番号に続いてその内容を標準出力ストリームに書き込みます。 次の例はこれを示しています。
上記のコードを実行すると、次の結果が得られます。
行番号と最初の4行の内容を印刷してみましょう。 次のコマンドは、最初の4行を行番号付きで、残りを行番号なしで印刷します。
上記のコードを実行すると、次の結果が得られます。
さらに、パターンマッチが成功したときに行番号を印刷するようにSEDに指示できます。 次の例では、パターン「Paulo」を含む行番号を出力します。
上記のコードを実行すると、次の結果が得られます。
次のSEDコマンドが何をするか推測できますか?
上記のコードを実行すると、次の結果が得られます。
はい、その通りです。 ファイルに存在する行の総数をカウントします。 コードをわかりやすく説明します。 コマンドセクションでは、 "$ ="を使用しました。これは、最後の行の行番号とその内容を出力します。 しかし、パターンバッファのデフォルトの印刷を抑制する -n フラグも提供しました。 したがって、最後の行番号のみが表示されます。
&コマンド
SEDは特殊文字&をサポートします。 パターンの一致が成功するたびに、この特殊文字は一致したパターンを保存します。 多くの場合、置換コマンドとともに使用されます。 この効率的な機能を活用する方法を見てみましょう。
book.txtファイルの各行には番号が付けられています。 各行の先頭に「書籍番号」という言葉を追加しましょう。 次の例はこれを示しています。
上記のコードを実行すると、次の結果が得られます。
この例は非常に簡単です。 最初に、行番号である数字の最初の出現を検索し(これが:digit:を使用した理由です)、SEDは一致したパターンを特殊文字&に自動的に保存します。 2番目のステップでは、一致した各パターンの前、つまりすべての行の前に Book number という単語を挿入します。
別の例を見てみましょう。 book.txtファイルでは、最後の数字は本のページ数を意味します。 その前に "Pages ="を追加しましょう。 これを行うには、最後に出現する数字を見つけて、「Pages =&」に置き換えます。 ここでは、一致したパターン、つまりページ数を保存します
上記の構文を実行すると、次の結果が得られます。
とりあえず、 :digit: $ *は最後に見つかった数字を見つけることを覚えておいてください。 「正規表現」の章では、正規表現について詳しく説明します。