以前の記事では、grepを使用してテキストを操作する方法について説明しました。 。次に、sedに注意を向けます。 (ストリームエディタ)。パイプライン(パイプからのデータ)での使用に最適です。 sed ユーティリティを使用して、ファイルの内容を印刷し、1行(または複数行)に置き換えてから、ファイルを保存できます。 grepとは対照的 、sed ファイル内の1行または複数行を置き換えて、インプレースを実行できます。 そのファイルの更新。
 最も単純なsed fooを置き換えるときの呼び出し barの場合 は:
$ sed 's/foo/bar/' inputfile 例:コメントを削除する
 grep 画面上の出力をフォーマットできますが、その場でファイルを変更することはできません。これを行うには、edのようなファイルエディタが必要です 。 ed以降 この記事には含まれていません。sedを使用してください grepで行ったのと同じことを実現するため 前の記事の最初の例で。今回は/etc/fstabを変更します -iを渡すインプレースファイル sedへのフラグ 。 -iなし フラグを立てると、変更されたものだけが表示されます。
 常にsedを実行することをお勧めします -iなし フラグ、それが生成する結果が期待されることを確認するためだけに。 sed ユーティリティは-i.bakも提供します フラグ。編集前にバックアップファイルを作成します。
 最後のgrep この例のコマンドは次のとおりです。
$ grep -v '^#' /etc/fstab > ~/fstab_without_comment 
 sedを使用 、あなたは持っています:
# sed -i '/^#/d' /etc/fstab
/dev/mapper/VGCRYPTO-ROOT /                       ext4    defaults,x-systemd.device-timeout=0 1 1
UUID=e9de0f73-ddddd-4d45-a9ba-1ffffa /boot                   ext4    defaults             1 2
LABEL=SSD_SWAP		swap		swap		defaults	0 0
 例:/etc/passwdのみを印刷します ユーザー
 
 grep内 たとえば、/etc/passwdからのユーザー名のみを印刷しました 次のファイル:
$ grep -Eo '^[a-zA-Z_-]+' /etc/passwd 
 sedを使用して同じことを行うことができます 次のように:
$ sed 's/^\([a-zA-Z_-]\+\).*/\1/' /etc/passwd
 
 上記の例では、一致を括弧でグループ化しています() 、次に一致したグループを\1で印刷します (後方参照)、これは最初のグループを指示します。 2番目のグループには、\2を使用します 、など。
例:すべてのfooを置き換えます bar付き 
 
 sedで 、パターンを検索して、パターンに一致するオカレンスのみを置き換えることができます。ファイル内のすべてのオカレンスを置き換えるにはinputfile1 fooから barへ グローバルに実行:
$ sed -i '/foo/bar/g' inputfile1
 例:単一のインスタンスを置き換える
 ファイルinputfile2を取得します 、次の内容が含まれています:
hello world
second line should be replaced
this line should be replaced later
 
 shouldを置き換えたいと言ってください will 、ただし2行目のみ。このコマンドは次のように分類されます。
$ sed '/second/s/should/will/' inputfile2
          |    |    |     |
          |    |    |     with this pattern 
          |    |    this pattern
          |    substitute   
         Search for the pattern "second"
 この出力は、ファイルの内容を置き換えるのではなく、標準出力に送信されます。結果は次のようになります:
$ sed '/second/s/should/will/' inputfile2
hello world
second line will be replaced
this line should be replaced later
 
 sed コマンドでは大文字と小文字が区別されます。 Worldを置き換えようとすると、以下は機能しません there :
$ echo "Hello World" | sed 's/world/there/'
Hello World
 
 GNU sed 新しいフラグ/Iを導入しました 、ケースを無視し、  同じコマンドで置換を実行します:
$ echo "Hello World" | sed 's/world/there/I'
Hello there
 例:行の範囲を印刷して終了します
 sedを使用 、行を印刷して、基準が満たされた後に終了することもできます。次のコマンドは、3行を出力して終了します。このコマンド:
$ sed -n '1,3p' /etc/passwd
 と同等です:
$ sed '3q' /etc/passwd
 以下は間違っているでしょう:
$ sed '1,3q' /etc/passwd # Wrong. You cannot quit three times 
 例:コメントされていない行をコメントアウトする
 正規表現は、sedでも使用できます 、前に示したように。たとえば、次の小さなスクリプトがあります。
$ cat test_script 
#/usr/bin/env bash
this is the first comment
This is another comment
# this is a comment too
echo "This is not a comment and should be echoed"
 
 ここで、#!/bin/bashで始まる最初の行をスキップする必要があります 、3行目と4行目をコメントアウトしますが、5行目はすでにコメント化されているため、コメントアウトしません。
 sedで 、次のようなものを使用できます:
$ sed '3,6s/^[^#]/# &/g' test_script
#/usr/bin/env bash
# this is the first comment
# This is another comment
# this is a comment too
echo "This is not a comment and should be echoed"
 上記のコマンドでは、以下が実行されます。
-  3,6s3行目から6行目までの範囲を定義します。
-  /^[^#]/文字であり、ハッシュ(#で始まらない)すべてに一致します 。
-  /# &/gパーツを置き換えます。この場合、#を配置します。&で指定された行の前 サイン。
例:すべての数字を削除する
 さまざまなアプリケーションがさまざまな形式でデータを生成します。 sedを使用 、使用できるデータのみを保持できます。たとえば、次のファイルがあります(inputfile3 )この形式:
foo1234
bar99128
baz2842
qux12953
discard39120
 
 プログラムが間違った形式を生成したか、フィールドを1つに連結した可能性があります。英字のみを保持することに関心があり、数字を破棄したい場合はどうなりますか? sedでこの目標をどのように達成しますか ?
答えはおそらくあなたが思っているよりも簡単です:
$ sed 's/\([a-z]*\).*/\1/' inputfile3
foo
bar
baz
qux
discard
 例:特定の行を変更する
 さらに、sed パターンごとに範囲を処理することもできます。つまり、 startを指定できます。 および終了 文字列を作成し、範囲を操作します。例:
$ cat inputfile4
hello world
start of the comment
another comment
end of a comment
dont comment this line
nor this line
 
 次のsed コマンドは、 startで始まる行にコメントを付けます  endで終わります :
$ sed '/start/,/end/ s/^/# /' inputfile4 
hello world
# start of the comment
# another comment
# end of a comment
dont comment this line
nor this line
 空の行も削除します。
$ sed '/start/,/end/ s/^/# /;/^$/d' inputfile4
hello world
# start of the comment
# another comment
# end of a comment
dont comment this line
nor this line
 
 sedにはまだまだたくさんのことがあります とその豊富な機能。 sedを十分に活用できるようにするため の能力については、こちらのドキュメントページをご覧ください。また、sedに関する優れた情報源 ここで見つけることができます。
 前に説明したように、grepを使用します ファイルまたは複数のディレクトリでパターンを再帰的に検索する場合。 sedを使用する パイプラインからデータを受信している場合、またはデータをその場で操作したい場合。
 sed コマンドはスクリプト化されており、基本的な操作の実行方法を簡単に学ぶことができます。必要なのは、特に正規表現を使用した練習だけです。