sed

「プログラミング」及び「開発」関連用語集

カテゴリー: 正規表現  閲覧数:375 配信日:2018-05-11 09:59


sedとは?


Stream EDitor
・UNIX標準のストリームエディタ
・テキストのフィルタリング、変換用のストリームエディタ
・1973年ごろ、Lee E. McMahonによって作成された


sed コマンドの用法

sed (GNU sed) 4.2.2


2012年12月22日リリース

CentOS7
$ sed --version
sed (GNU sed) 4.2.2
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Jay Fenlason, Tom Lord, Ken Pizzini,
and Paolo Bonzini.
GNU sed ホームページ: <http://www.gnu.org/software/sed/>.
GNU ソフトウェアを使用する際の一般的なヘルプ: <http://www.gnu.org/gethelp/>.
電子メールによるバグ報告の宛先: <bug-sed@gnu.org>
報告の際、“Subject:” フィールドのどこかに “sed” を入れてください。
翻訳に関するバグは<translation-team-ja@lists.sourceforge.net>に報告してください。


$ info sed
This file documents version 4.2.2 of GNU `sed', a stream editor.


CentOS7における man sed 日本語
$ man sed
.
SED(1)                                           ユーザコマンド                                           SED(1)

名前
      sed - テキストのフィルタリング、変換用のストリームエディタ

書式
      sed [OPTION]... {script-only-if-no-other-script} [input-file]...

説明
      sed                                      はストリームエディタである。ストリームエディタは、入力ストリーム
      (ファイルまたはパイプラインからの入力)     に対して基本的なテキスト変換を行うために用いられる。sed     は
      編集スクリプトを使える   (ed   のような)   エディタと   いろいろな面で似ているが、sed   は入力に対して  1
      パスだけで動作するので、より効率的である。また                                                        sed
      はパイプラインのテキストに対してフィルタ動作を行うことができ、この点は他のタイプのエディタとはっきり違う。

      -n, --quiet, --silent

             パターンスペースの自動出力を抑制する

      -e script, --expression=script

             実行するコマンドとして script を追加する

      -f script-file, --file=script-file

             実行するコマンドとして script-file の内容を追加する

      --follow-symlinks

             インプレース処理においてシンボリックリンクを辿る

      -i[SUFFIX], --in-place[=SUFFIX]

             ファイルをインプレース処理で編集する (SUFFIX 指定時はバックアップを取る)

      -l N, --line-length=N

             `l' コマンドの出力行を折り返す長さを指定する

      --posix

             全ての GNU 拡張を無効にする

      -r, --regexp-extended

             スクリプトで拡張正規表現を使用する

      -s, --separate

             複数の入力ファイルを一続きのストリームとして扱わずに個別のファイルとして扱う

      -u, --unbuffered

             入力ファイルからデータをごく少量ずつ取り込み、頻繁に出力バッファを掃き出す (flush)

      -z, --null-data

             NUL 文字で行を分割する

      --help
             ヘルプを表示して終了する

      --version
             バージョン情報を出力して終了する

      -e、--expression、-f、または --file  オプションのいずれも指定されない場合、最初のオプションでない引き数が
      sed
      スクリプトとして解釈される。残りの全ての引き数は入力ファイル名として扱われる。入力ファイルが指定されない場合は、標準入力から読み込む。

      GNU  sed  ホームページ: <http://www.gnu.org/software/sed/>. GNU ソフトウェアを使用する際の一般的なヘルプ:
      <http://www.gnu.org/gethelp/>.    電子メールによるバグレポートの宛先:    <bug-sed@gnu.org>.    「Subject:
      」フィールドのどこかに「sed」を記載してください。

コマンドの文法
      これは                   sed                   コマンドのごく簡単な概要であり、既に                   sed
      を知っている人向けの備忘録程度のものである。より詳細な情報については、他の文書     (texinfo     文書など)
      を参照すること。

  アドレスを取らないコマンド
      : label
             b コマンドと t コマンド用のラベル。

      #comment
             次の改行文字まで (あるいは -e スクリプトフラグメントの末尾まで) をコメントとして取り扱う。

      }      { } ブロックの閉じ括弧。

  アドレスを 0 または 1 個取るコマンド
      =      現在の行番号を出力する。

      a \

      text   text を追加する。text に改行を含める場合は、各改行の前にバックスラッシュを置く。

      i \

      text   text を挿入する。text に改行を含める場合は、各改行の前にバックスラッシュを置く。

      q [exit-code]
             これ以上入力を処理せず、ただちに                                                               sed
             スクリプトの処理を終了する。ただし自動出力が抑制されていない場合、現在のパターンスペースが出力される。引き数
             exit-code は GNU 拡張である。

      Q [exit-code]
             これ以上入力を処理せず、ただちに   sed   スクリプトの処理を終了する。引き数   exit-code   は   GNU
             拡張である。

      r filename
             filename から読み込んだテキストを追加する。

      R filename
             filename     から     1      行読み込み、追加する。コマンドを起動するたびにファイルから次の      1
             行を読み込む。このコマンドは GNU 拡張である。

  アドレス範囲を指定できるコマンド
      {      コマンドブロックを開始する (} で終了する)。

      b label
             label に分岐する。label が省略された場合は、スクリプトの末尾に分岐する。

      c \

      text   選択した行を text で置換する。text に改行を含めたい場合は、その前にバックスラッシュを置く。

      d      パターンスペースを削除する。次のサイクルを開始する。

      D      パターンスペースに改行がない場合は、d
             コマンドと同様に通常の次のサイクルを開始する。そうでない場合は、パターンスペースの最初の改行までを削除し、次の入力行を読み込まずに、その結果の
パターンスペースでサイクルを開始する。

      h H    パターンスペースをホールドスペースにコピー/追加する。

      g G    ホールドスペースをパターンスペースにコピー/追加する。

      l      現在の行を「視覚的に曖昧性のない」形式でリストする。

      l width
             現在の行を「視覚的に曖昧性のない」形式でリストし、width    の文字で折り返す。このコマンドは    GNU
             拡張である。

      n N    入力の次の行をパターンスペースに読み込む/追加する。

      p      現在のパターンスペースを出力する。

      P      現在のパターンスペースの最初の改行までを出力する。

      s/regexp/replacement/
             パターンスペースに対して regexp のマッチを試みる。マッチに成功すると、マッチした部分を replacement
             に置換する。replacement                            には特殊文字である                            &
             を含めることができ、これはパターンスペースのマッチした部分を参照する。また     \1     から      \9
             までの特殊エスケープを含むこともでき、これは      regexp      の部分正規表現      (sub-expression)
             にマッチした部分をそれぞれ参照する。

      t label
             直近の入力行が読み込まれて以降、かつ、直近の      t       あるいは       T       コマンド以降に、s
             コマンドが成功していれば、label に分岐する。label が省略された場合は、スクリプトの末尾に分岐する。

      T label
             直近の入力行が読み込まれて以降、かつ、直近の       t       あるいは       T      コマンド以降に、s
             コマンドが成功していなければ、label                                              に分岐する。label
             が省略された場合は、スクリプトの末尾に分岐する。このコマンドは GNU 拡張である。

      w filename
             現在のパターンスペースを filename に書き込む。

      W filename
             現在のパターンスペースの先頭行を filename に書き込む。このコマンドは GNU 拡張である。

      x      ホールドスペースとパターンスペースの内容を交換する。

      y/source/dest/
             パターンスペースにある文字のうち、source にあるものを、dest の同じ位置にある文字に置換する。

アドレス
      sed
      のコマンドはアドレスなしで指定することもでき、この場合そのコマンドは全ての入力行に対して実行される。アドレスをひとつ指定すると、コマンドはそのアドレスにマッチした入力行に対してのみ実行される。2
      つのアドレスを指定ると、最初のアドレスにマッチした行から、2        番目のアドレスにマッチした行に至る範囲
      (両マッチ行を含む)         にあるすべての行に対して実行される。アドレスの範囲指定については次の         3
      点を注意しておく。まず指定方法は      addr1,addr2      である     (つまりアドレスをコンマで区切る)。addr1
      にマッチした行は、たとえaddr2  がそれ以前の行にマッチする場合でも、常に処理対象となる。addr2  が   regexp
      (正規表現) の場合には、addr1 にマッチした行に対しては addr2 のマッチは行われない。

      アドレス    (あるいはアドレス範囲)    とコマンドの間には    !    を挟むことができる。この場合は、アドレス
      (あるいはアドレス範囲) がマッチしなかった行に対してのみコマンドが実行される。

      以下のアドレスタイプがサポートされている。

      number number               で指定した行にのみマッチする               (コマンドラインで               -s
             オプションを指定していない場合、行数はファイル間で通算でカウントされる)

      first~step
             first     行からはじまる     step     行おきの行にマッチする。例えば     “sed    -n    1~2p”    は
             入力行のうち奇数行を出力し、アドレスを 2~5 にすると、第 2 行から 5  行おきに表示する。first  は  0
             を指定することが可能である。この場合、step           に等しい値が指定されたものとして          sed
             は処理する。(これは GNU 拡張である)。

      $      最終行にマッチする。

      /regexp/
             正規表現 regexp にマッチした行にマッチする。

      \cregexpc
             正規表現 regexp にマッチした行にマッチする。c には任意の文字を指定できる。

      GNU sed は、次の特殊な 2 アドレス形式もサポートする。

      0,addr2
             「先頭アドレスにマッチした状態」で開始し、addr2  が見つかるまでその状態を維持する。これは、1,addr2
             に類似しているが、次の点において挙動が異なる。addr2        が入力の先頭行にマッチする場合、0,addr2
             形式ではアドレス範囲の終了位置にあるとみなされるが、1,addr2
             形式ではアドレス範囲の開始位置にあるとみなされる。このアドレス指定は、addr2
             が正規表現の場合にのみ機能する。

      addr1,+N
             addr1 から、addr1 以降の N 行にマッチする。

      addr1,~N
             addr1 から、addr1 以降の、入力行番号が N の倍数の行までマッチする。

正規表現
      POSIX.2 BRE  をサポートするべきであるが、性能上の問題により完全にはサポートしていない。正規表現内部の  \n
      シーケンスは改行文字にマッチし、\a、\t、およびその他のシーケンスも同様である。

バグ
      バグレポートは         bug-sed@gnu.org        まで送ってください。また、可能であれば、「sed        --ver‐
      sion」の出力結果をレポート本文に記載してください。

著者
Manual page sed(1) line 175 (press h for help or q to quit)