私はsed
最近多くを見てきましたが、それはかなり混乱したコマンドであることがわかりました。マンページは特に役立ちませんでしたが、他のコマンドの出力を解析するために使用できることは知っています。
正確に何でありsed
、何を使用していますか?私sed
は、それが何であるか、一般的に何に使用されているか、そしていくつかの基本的な例/構文を網羅する包括的な答えを探しています。
私はsed
最近多くを見てきましたが、それはかなり混乱したコマンドであることがわかりました。マンページは特に役立ちませんでしたが、他のコマンドの出力を解析するために使用できることは知っています。
正確に何でありsed
、何を使用していますか?私sed
は、それが何であるか、一般的に何に使用されているか、そしていくつかの基本的な例/構文を網羅する包括的な答えを探しています。
回答:
定義
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アプリケーションと例
sed
は、物事(行の削除、文字列の置換、文字列のフィルタリングなど)を可能にする強力なコマンドです。
argsを使用して使用のリストを提供できますが、インターネットはそれでいっぱいです。検索sed usage by examples
は多くの結果をもたらします、かわいいもの:http : //www.thegeekstuff.com/2009/10/unix-sed-tutorial-advanced-sed-substitution-examples/
この回答は進行中の作業です-susbstituteコマンドに関する他の例を見逃しています
sed
?sed
= Stream EDitor
GNU sed
4.2.2レポートのマニュアルページの説明:
Sedはストリームエディターです。ストリームエディタは、入力ストリーム(ファイルまたはパイプラインからの入力)で基本的なテキスト変換を実行するために使用されます。スクリプト編集を許可するエディター(edなど)に似ている点もありますが、sedは入力を1回だけ渡すことで機能するため、より効率的です。ただし、パイプラインでテキストをフィルター処理するのはsedの機能であり、他のタイプのエディターとは特に区別されます。
gnu.orgのGNU 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 ~ %
* この回答で説明されているコマンドであるp
、d
および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
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.