Home
479 words
2 minutes
【Unix】sedの解説
2025-02-24

最終更新:2025-02-24

概要#

sedコマンドは、テキストストリームを簡易的に編集・置換するストリームエディタである。ファイルやパイプからの入力に対して、指定したパターンに基づく変換を行い、結果を出力する。主な使用例は以下の通り。

sed [オプション] [スクリプト] [ファイル...]

オプション一覧とハンズオン#

1. -n(出力抑制)#

  • 機能: 自動出力を抑制し、表示指示があった行のみを出力する。
  • 使用例:
    sed -n '/banana/p' sample.txt
    
  • 出力例:
    banana
    

2. -e(複数スクリプト指定)#

  • 機能: 複数のスクリプト(置換や操作)を連続で実行する。
  • 使用例:
    sed -e 's/apple/orange/g' -e 's/banana/grape/g' sample.txt
    
  • 出力例:
    orange
    grape
    orange
    grape
    

3. -f(スクリプトファイル)#

  • 機能: 外部ファイルに記述したsedコマンド群を実行する。
  • 使用例:
    sed -f script.sed sample.txt
    
  • 出力例:
    orange
    grape
    orange
    grape
    

4. -i(ファイル直接編集)#

  • 機能: 対象ファイルを上書き編集する。
  • 使用例:
    sed -i 's/apple/orange/g' sample.txt
    
  • 出力例(実際のファイル内容が変化):
    orange
    banana
    orange
    grape
    
  • バックアップ:
    sed -i.bak 's/apple/orange/g' sample.txt
    

5. -r / -E(拡張正規表現)#

  • 機能: 括弧やパイプなどの拡張正規表現を簡易に使用できる。
  • 使用例:
    sed -E 's/(apple|banana)/fruit/g' sample.txt
    
  • 出力例:
    fruit
    fruit
    orange
    grape
    

6. -l 数値(行幅指定)#

  • 機能: 出力を指定文字数で折り返して表示する。
  • 使用例:
    sed -l 20 's/a/A/g' longtext.txt
    
  • 出力例: 長文を20文字単位で改行するため、実際の表示は文章次第。

7. -z(NUL区切り入力)#

  • 機能: NUL文字で区切られたテキストを行単位で扱う(環境依存)。
  • 使用例:
    sed -z 's/apple/orange/g' binarydata.txt
    
  • 出力例: テキスト表現は変化が見えにくいが、NUL区切りで置換が行われる。

パイプ処理でのハンズオン#

他コマンドからの出力をsedで変換する例を示す。

ls | grep '\.txt$' | sed 's/\.txt$/.md/'
  • ls の出力から .txt ファイルのみ抽出し、それらの拡張子を .md に変換して表示する。
  • 出力例:
    file1.md
    file2.md
    memo.md
    
【Unix】sedの解説
https://ss0832.github.io/posts/20250224_sed_command_guide/
Author
ss0832
Published at
2025-02-24