31+ Examples for sed Linux Command in Text Manipulation

前回の記事では、bashの関数と、それをコマンドラインから直接使用する方法について説明し、他にもいくつかのクールなものを見てきました。

私たちは、ログ ファイルや設定ファイルなどのテキスト ファイルを操作するために sed を使用します。

この投稿では、bash スクリプトを使用する上で不可欠なテキスト操作に使用される sed Linux コマンドに焦点を当てます。

Linuxシステムは、テキスト処理のためのツールをいくつか提供していますが、そのうちの1つがsedです。

31以上の例を、すべての例の出力を示す写真とともに説明します。

目次

Understand sed Linux command

sedコマンドは、非対話型のテキストエディタです。

$ sed options file

sedはファイル操作に限定されず、以下のようにSTDINに直接適用することもできます。

$ echo "Welcome to LikeGeeks page" | sed 's/page/website/'

sed Linuxコマンド

sコマンドは、1つ目のテキストを2つ目のテキストパターンで置き換えます。 この例では、文字列「website」を単語「page」に置き換えました。

上記の例は、ツールを実演するための簡単な例でした。

サンプルファイルを作成してみましょう :

sed manipulate file

$ sed 's/test/another test/' ./myfile

結果は瞬時に画面に表示されますので、ファイルを最後まで処理するのを待つ必要はありません。

ファイルのサイズが大きければ、処理が終わる前に結果が表示されます。

Sed Linuxコマンドはデータを更新しません。 変更されたテキストをSTDOUTに送るだけです。 ファイルにはまだ手が加えられていません。 既存のコンテンツを上書きする必要がある場合は、リダイレクトについて話していた以前の記事を確認してください。

コマンドラインで複数の sed Linux コマンドを使用する

複数の sed コマンドを実行するには、次のように -e オプションを使用します。

$ sed -e 's/This/That/; s/test/another test/' ./myfile

sed 複数のコマンド

sed コマンドは、スペースを入れずにセミコロンで区切らなければなりません。

また、シングルクォーテーションを使って、次のようにコマンドを分けることもできます。

$ sed -e '> s/This/That/> s/test/another test/' myfile

sed separate commands

結果は同じで、大したことはありません。

ファイルからのコマンドの読み込み

sedコマンドをファイルに保存しておき、-fオプションでファイルを指定して使用することができます。

$ cat mycommandss/This/That/s/test/another test/
$ sed -f mycommands myfile

read commands from file

フラグの代用

次の例をよく見てください。

$ cat myfile
$ sed 's/test/another test/' myfile

sed substitute flag

上記の結果は、各行の最初の出現箇所を置き換えたことを示しています。

次のような置換フラグを使うことができます。

s/pattern/replacement/flags

置換には4つのタイプがあります:

  • g, すべての出現箇所を置き換える。
  • p, 元の内容を印刷する。
  • w file: 結果をファイルに書き込むことを意味します。

次のように、置換するオカレンス番号を指定することで、置換を制限することができます:

$ sed 's/test/another test/2' myfile

sed number flag

見てわかるように、各行の2番目のオカレンスだけを置換しています。

g フラグはグローバルを意味し、すべての出現箇所をグローバルに置き換えることを意味します:

$ sed 's/test/another test/g' myfile

sed グローバル フラグ

p フラグは、パターン マッチを含む各行を表示しますが、-n オプションを使用して変更された行のみを表示することもできます。

$ cat myfile
$ sed -n 's/test/another test/p' myfile

sed supress lines

w フラグは、出力を指定したファイルに保存します。

$ sed 's/test/another test/w output' myfile

send output to file

出力を画面に表示しましたが、一致する行を出力ファイルに保存しました。

文字の置換

たとえば、sed を使用して /etc/passwd ファイル内で bash シェルを検索し、それを csh シェルに置換したいとしましょう。

$ sed 's!/bin/bash!/bin/csh!' /etc/passwd

これで読みやすくなりました。

Limiting sed

sedコマンドは、ファイル全体を処理します。

  • 行の範囲。
  • 特定の行にマッチするパターン。

数字を1つ入力することで、特定の行に制限することができます:

$ sed '2s/test/another test/' myfile

sed restricted

2行目だけを修正しました。

行の範囲を使う場合はどうでしょうか:

$ sed '2,3s/test/another test/' myfile

replace range of lines

また、ファイルの最後までの行から始めることもできます。

$ sed '2,$s/test/another test/' myfile

sed replace to the end

または、次のようなパターンを使用することもできます。

$ sed '/likegeeks/s/bash/csh/' /etc/passwd

sed pattern match

すごい!

このパターンを正規表現で書くと、より汎用的で便利になります。

行の削除

sedを使って行を削除するには、delete (d)フラグがお勧めです。

deleteフラグは、元のファイルではなく、ストリームからテキストを削除します。

$ sed '2d' myfile

sed delete line

ここでは、myfileから2行目のみを削除しています。

行の範囲を削除する場合はどうでしょうか。

$ sed '2,3d' myfile

delete multiple line

ここでは、2行目と3行目の行の範囲を削除しています。

別のタイプの範囲:

$ sed '3,$d' myfile

delete to the end

ここでは、3行目からファイルの最後までを削除します。

これらの例はすべて、元のファイルを変更することはありません。

$ sed '/test 1/d' myfile

delete pattern match

ここでは、パターンを使用して、1行目でマッチした場合にその行を削除します。

行の範囲を削除する必要がある場合は、次のような 2 つのテキスト パターンを使用できます:

$ sed '/second/,/fourth/d' myfile

行の範囲を削除

2 行目から 4 行目までを削除しました。

テキストの挿入と追加

次のフラグを使って、テキストの行を挿入したり追加したりすることができます:

  • (i)フラグ。
  • (a)フラグ。
$ echo "Another test" | sed 'i\First test '

sed insert text

指定した行の前にテキストを追加しました。

$ echo "Another test" | sed 'a\First test '

sed append

指定した行の後にテキストを追加しました。

では、真ん中にテキストを追加するのはどうでしょうか?

簡単です。次の例を見てください:

$ sed '2i\This is the inserted line.' myfile

sed insert line

そして、追加も同じように動作しますが、追加されたテキストの位置を見てください。

$ sed '2a\This is the appended line.' myfile

sed append line

同じフラグを使用していますが、挿入や追記の位置を指定しています。

行の修正

特定の行を修正するには、次のように (c) フラグを使用します。

$ sed '3c\This is a modified line.' myfile

sed modify line

正規表現のパターンを使用することができ、そのパターンに一致するすべての行が修正されます。

$ sed '/This is/c Line updated.' myfile

sed pattern match

文字の変換

変換フラグ(y)は次のような文字に作用します。

$ sed 'y/123/567/' myfile

sed transform character

すべてのデータに変換を適用したので、特定の出現場所に限定することはできません。

行番号の表示

次のように(=)記号を使って行番号を表示することができます。

$ sed '=' myfile

sed 行番号

ただし、-nと等号を組み合わせることで、sedコマンドはマッチングを含む行番号を表示することができます。

$ sed -n '/test/=' myfile

hide lines

ファイルからデータを読み込む

ファイルからデータを読み込むには、(r)フラグを使用します。

読み込みたいテキストの行番号やテキストパターンを定義することができます。

$ cat newfile
$ sed '3r newfile' myfile

read data from file

予想通り3行目以降にコンテンツを挿入しました。

そして、これはテキストパターンを使用しています:

$ sed '/test/r newfile' myfile

read match pattern

かっこいいでしょう?

便利な例

プレースホルダー付きのテキストを含むファイルと、他のファイルのプレースホルダーを埋めるデータを含む別のファイルがあるとしましょう。

それを実際のコンテンツに置き換えます。

$ Sed '/DATA>/ {r newfiled}' myfile

repalce placeholder

すごい!!見ての通り、プレースホルダーの場所を他のファイルからのデータで埋めました。

これは sed コマンドについてのほんの小さな紹介です。

唯一の制限は、あなたの想像力です。

sed Linuxコマンドを使って、文字列を簡単に操作できることがお分かりいただけたと思います。

ありがとうございました。

LikeGeeksの創設者です。 2010年からLinuxのシステム管理者として働いています。 世界中の複数の顧客のために、Linuxサーバーの維持、保護、トラブルシューティングを担当しています。 仕事を自動化するためにシェルやPythonのスクリプトを書くのが好きです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です