sedとは何ですか?


20

私はsed最近多くを見てきましたが、それはかなり混乱したコマンドであることがわかりました。マンページは特に役立ちませんでしたが、他のコマンドの出力を解析するために使用できることは知っています。

正確に何でありsed、何を使用していますか?私sedは、それが何であるか、一般的に何に使用されているか、そしていくつかの基本的な例/構文を網羅する包括的な答えを探しています。


3
Sedのmanページから:Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.
saji89

これは包括的な答えを始めるのに適した場所です:en.wikipedia.org/wiki/Sed
saji89

1
info sedはをはるかに超えていman sedます。次に、に/usr/share/doc/sedありsedfaq.txt.gzます。

回答:


20

基本的な使用法では、文字列での「検索と置換」に使用されます。

echo "The quick brown fox jumps over the lazy dog" | sed 's/dog/cat/'

返す

"The quick brown fox jumps over the lazy cat"

Sedは、正規表現が使用されている場合に非常に効果的です。

あなたは見てとるのが好きかもしれないこの記事についてsedの非常に包括的に、。


5

定義

Unix System V:実用的なガイド、Mark Sobellの本:

sedユーティリティは、バッチ(非対話型)エディターです。通常、sedコマンドはscript-fileに保存されます。。。ただし、コマンドラインから簡単なsedコマンドを指定できます。。。

sed(GNU sed)4.2.2のmanページ:

Sedはストリームエディターです。ストリームエディタは、入力ストリーム(ファイルまたはパイプラインからの入力)で基本的なテキスト変換を実行するために使用されます。

私の非公式の定義:

Sedストリームエディタの略)は、テキストが一度に1行ずつ処理されるときに開発されたテキスト処理ユーティリティですが、最も強力なUnix / Linuxユーティリティの1つです。同時に、テキスト処理用に特別に設計されたスクリプト言語の形式です。

用途

定義が示すように、sedテキストの行、テキストファイル、およびテキストのパイプストリームのバッチ処理に使用されます。ほとんどの場合、テキストの置換と削除に使用されます。

echo "stackexchange" | sed 's/stackexchange/askubuntu/'

ただし、他のコマンドの動作を模倣するためにも使用できます。たとえば、

  • dmesg | head -n 3(最初の3行を印刷する)を模倣する には、次のようにしますdmesg | sed -n 1,3p
  • dmesg | grep 'wlan0'(文字列の検索)を模倣するには、次のようにします。dmesg | sed -n '/wlan0/p'
  • リストアイテム

sed他のテキスト処理ユーティリティよりも大きな利点は-iフラグです。つまり、編集したテキストを画面に出力するだけでなく、実際に編集を元のファイルに保存することができます。awk対照的に、フレーバーは、GNU awkバージョンではそのような機能しかありません。

sedセミコロン(;)で区切られた複数のパターン、または-fフラグの後に指定されたスクリプトファイルからコマンドラインで入力を取得できます。cat someTextfile.txt | sed -f myScript.sed

Sedアプリケーションと例



1

この回答は進行中の作業です-susbstituteコマンドに関する他の例を見逃しています


なにsed

sed = Stream EDitor

GNU sed4.2.2レポートのマニュアルページの説明:

Sedはストリームエディターです。ストリームエディタは、入力ストリーム(ファイルまたはパイプラインからの入力)で基本的なテキスト変換を実行するために使用されます。スクリプト編集を許可するエディター(edなど)に似ている点もありますが、sedは入力を1回だけ渡すことで機能するため、より効率的です。ただし、パイプラインでテキストをフィルター処理するのはsedの機能であり、他のタイプのエディターとは特に区別されます。

gnu.orgGNU sedページの説明は次のとおりです。

sed(ストリームエディター)は、インタラクティブなテキストエディターではありません。代わりに、テキストのフィルタリングに使用されます。つまり、テキスト入力を受け取り、そのテキストに対して何らかの操作(または一連の操作)を実行し、変更されたテキストを出力します。sedは通常、パターンマッチングを使用してファイルの一部を抽出したり、ファイル内の文字列の複数の出現を置換するために使用されます。

何をしているsedために使用?

データのストリーム(通常はテキストですが、バイナリデータの変更にも使用できます)に複雑な変更を行うために使用できます。

最も一般的な使用例には次のものがあります。

  • 基本/拡張正規表現を使用してテキストファイルから行を選択的に印刷/削除する
  • 基本/拡張正規表現を使用してテキストファイル内の文字列をグローバルに置換する
  • 基本/拡張正規表現を使用してテキストファイル内の文字列を選択的に置き換える

これらは、この回答で説明されている使用例です。

使用法

sed呼び出し中にコマンドライン引数でstdinファイル名が指定されている場合、またはファイル名が指定されていない場合、ファイルシステムに保存されているファイルから入力を読み取ります。

ファイルシステムに保存されたファイルを使用した最小限の呼び出し:

sed '' file

を使用した最小限の呼び出しstdin

# herestring
<<<'Hello, World!' sed ''

# heredoc
<<'EOF' sed ''
heredoc> Hello, World!
heredoc> EOF

# file
<'file' sed ''

# pipe
echo 'Hello, World!' | sed ''

こんにちは世界!

sedデフォルトでは、入力ファイルを行ごとに読み取ります。1行を読み取り、行の末尾の改行を削除して、処理された行を「パターンスペース」に入れます。最後に、リストされたコマンドをパターンスペースの現在のコンテンツで実行し、入力ファイルから新しい行を読み取ります。

コマンドが指定されていない場合、pまたはdコマンドが指定されている場合、* sedは、パターンスペースの現在の内容と、それに続く各反復での改行を常に出力します。

user@debian ~ % sed '' file
Hello, world! # no command but the lines are printed
user@debian ~ % sed 'p' file
Hello, World!
Hello, World! # the p command prints the lines already printed
user@debian ~ % sed 'd' file
user@debian ~ % # the d command deletes the lines that would be printed

これを防ぐsedには、-nスイッチと一緒に呼び出します。

user@debian ~ % sed -n '' file
user@debian ~ % sed -n 'p' file
Hello, World!
user@debian ~ % sed -n 'd' file
user@debian ~ % 

* この回答で説明されているコマンドであるpdおよびsコマンドについてのみ話す。

行の選択

sed入力ファイル全体を処理することも、入力ファイルの選択された行のみを処理することもできます。処理する入力ファイルの行の選択は、「アドレス」を指定することにより行われます。アドレスは(特に)行番号またはパターンのいずれかです。行の範囲は、アドレスの範囲を指定することにより選択できます。

アドレスの可能な組み合わせは次のとおりです。

  • <N><N>は数字です):次のコマンド/コマンドは行番号でのみ実行されます<N>;
  • <N>,<M>(ここで、<N>および<M>2つの数である<N>> <M>)次のコマンド/コマンドは、行番号の範囲の行に実行される<N>行番号を<M>含め。
  • /<pattern>/(ここ<pattern>で、基本または拡張正規表現):次のコマンド/コマンドは、<pattern>;の出現を含む行でのみ実行されます。
  • /<pattern1>/,/<pattern2>/(ここで、<pattern1>及び<pattern2>塩基性であるか、または正規表現を拡張)次のコマンド/コマンドは、の発生を含む最初の行の範囲の行に実行される<pattern1>の出現を含む次の行に<pattern2>複数の場合には複数回の注文、<pattern1>- <pattern2>出現箇所を、
  • <N>,/pattern/(ここ<N>で数字で<pattern>あり、基本または拡張正規表現です):次のコマンド/コマンドは、行番号<N>からの出現を含む最初の行までの行で実行され<pattern>ます;
  • /pattern/,<N>(ここ<pattern>で、基本正規表現または拡張正規表現で<N>あり、数値です):次のコマンド/コマンドは、出現を含む最初の行<pattern>から行番号までの行で実行され<N>ます;

行の範囲で印刷、削除、または置換を実行するために実行される選択には、指定されたアドレスに一致する行が常に含まれます。さらに、パターンを使用して行の範囲で印刷、削除、または置換を実行するために実行される選択は、遅延およびグローバルです(つまり、影響を受ける各範囲は常に可能な限り最小になり、複数の範囲が影響を受けます)。

行の範囲を印刷する場合、または置換が実行された行のみを印刷する場合、基準と一致する行が2回印刷されるのを防ぐために(これは行の範囲を印刷する場合のみ発生します)sed-nスイッチと共に呼び出す必要があります基準に一致しない行が印刷されることを防ぎます。

処理する行の選択の後には、コマンドまたは中括弧を使用してグループ化された複数のセミコロンで区切られたコマンドが続く必要があります。

コマンド:印刷、削除

選択範囲の印刷または削除に使用されるコマンドは、それぞれ次のとおりです。

  • p:指定されたアドレス/アドレスの範囲に一致する行を出力します。
  • d:指定されたアドレス/アドレス範囲に一致する行を削除します。

これらのコマンドの1つがアドレス/選択の前にない場合、コマンドはグローバルに、つまり入力ファイルの各行で実行されます。

例:印刷、削除

数値アドレスを指定する行の印刷/削除:

サンプルファイル:

line1
line2
line3
line4
line5
  • 印刷ライン<N>
sed -n '<N>p' file
user@debian ~ % sed -n '3p' file
line3
  • 行の削除<N>
sed '<N>d' file
user@debian ~ % sed '3d' file
line1
line2
line4
line5
  • 印刷ライン<N><M>包括:
sed -n '<N>,<M>p' file
user@debian ~ % sed -n '2,4p' file
line2
line3
line4
  • <N><M>包括的に削除:
sed '<N>,<M>d' file
user@debian ~ % sed '2,4d' file
line1
line5

パターンを指定する行の印刷/削除:

サンプルファイル:

First line
Start printing / deleting here
Random line
Random line
Random line
Stop printing / deleting here
Last line
  • 一致する印刷行<pattern>
sed -n '/<pattern>/p' file
user@debian ~ % sed -n '/print/p' file
Start printing / deleting here
Stop printing / deleting here
  • 一致する行の削除<pattern>
sed '/<pattern>/d' file
user@debian ~ % sed '/print/d' file 
First line
Random line
Random line
Random line
Last line
  • 行マッチング<pattern1>から行マッチングまでの行の印刷<pattern2>
sed -n '/<pattern1>/,/<pattern2>/p' file
user@debian ~ % sed -n '/Start/,/Stop/p' file
Start printing / deleting here
Random line
Random line
Random line
Stop printing / deleting here
  • 行マッチング<pattern1>から行マッチングまでの行の削除<pattern2>
sed '/<pattern1>/,/<pattern2>/d' file
user@debian ~ % sed '/Start/,/Stop/d' file 
First line
Last line

コマンド:代替

選択に対して置換を実行するために使用されるコマンドは次のとおりです。

  • s:指定されたアドレス/アドレスの範囲に一致する行を置換します。

このコマンドの前にアドレス/選択がない場合、コマンドはグローバルに、つまり入力ファイルの各行で実行されます。

sコマンドの構文は次のとおりです。

s/<pattern>/<replacement_string>/<pattern_flags>

スラッシュは「区切り文字」です。<pattern><replacement_string>および<pattern_flags>セクションを区切るために使用されます。

区切り文字は常にsコマンドの直後の文字です。それは、例えば、他の文字に設定することができます|

s|<pattern>|<replacement_string>|<pattern_flags>

<pattern>基本または拡張正規表現です。特別な意味を持つ特定のシーケンスを<replacement_string>含むことができる固定文字列sedです。<pattern_flags>は、の動作を変更するフラグのリストです<pattern>

sed特別な意味を持つ最も一般的な特定のシーケンス:

  • &:後方参照は、<pattern>;に一致する文字列に置き換えられます
  • \<N><N>数字は):で<N>キャプチャされたグループで置き換えられた後方参照<pattern>

最も一般的なフラグ:

  • g<pattern>グローバルに、つまり各行で複数回一致するように強制します。
  • i<pattern>大文字と小文字を区別せずに一致させます。
  • p:置換が実行された行をもう一度出力します(の呼び出しで-nスイッチを使用sedして、置換が実行された行のみを出力する場合に便利です)。

例:代替

サンプルファイル:

A-well-a everybody's heard about the bird
B-b-b-bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, the bird is the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, b-bird's the word
A-well-a bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, b-bird's the word
A-well-a don't you know about the bird?
Well, everybody knows that the bird is the word!
A-well-a bird, bird, b-bird's the word
A-well-a...
  • 最初の出現の交換<pattern>とを<replacement_string>それぞれの行に:
sed 's/<pattern>/<replacement_string>/' file
user@debian ~ % sed 's/bird/birds/' file
A-well-a everybody's heard about the birds
B-b-b-birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, the bird is the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, b-bird's the word
A-well-a birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, b-bird's the word
A-well-a don't you know about the birds?
Well, everybody knows that the birds is the word!
A-well-a birds, bird, b-bird's the word
  • すべての出現箇所を交換する<pattern><replacement_string>、各行に:
sed 's/<pattern>/<replacement_string>/g' file
user@debian ~ % sed 's/bird/birds/g' file
A-well-a everybody's heard about the birds
B-b-b-birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a don't you know about the birds?
Well, everybody knows that the birds is the word!
A-well-a birds, birds, b-birds's the word
A-well-a...
  • 始まる行だけを選択する<pattern1>と、すべての出現箇所置き換える<pattern2>とし<replacement_string>
sed -n '/^<pattern1>/s/<pattern2>/<replacement_string>/pg' file
user@debian ~ % sed -n '/^A/s/bird/birds/pg' file
A-well-a everybody's heard about the birds
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a don't you know about the birds?
A-well-a birds, birds, b-birds's the word
  • 終わる行だけを選択する<pattern1>と、すべての出現箇所置き換える<pattern2>とし<replacement_string>
sed -n '/<pattern1>$/s/<pattern2>/<replacement_string>/pg' file
user@debian ~ % sed -n '/word$/s/bird/birds/pg' file
B-b-b-birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, b-birds's the word
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.