GNU/Linux >> Linux の 問題 >  >> Linux

LinuxでのSEDコマンドの50の実用例

システム管理者であろうと単なる愛好家であろうと、テキストドキュメントを頻繁に操作する必要がある可能性があります。 Linuxは、他のUnicesと同様に、エンドユーザーに最適なテキスト操作ユーティリティのいくつかを提供します。 sedコマンドラインユーティリティは、テキスト処理をはるかに便利で生産的にするツールの1つです。経験豊富なユーザーの場合は、sedについてすでに知っている必要があります。ただし、初心者は、sedの学習には余分な労力が必要であると感じることが多いため、この魅惑的なツールの使用は控えてください。そのため、私たちはこのガイドを作成し、可能な限り簡単にsedの基本を学ぶことができるように自由に取り組んでいます。

初心者ユーザーに役立つSEDコマンド

Sedは、Unixで利用できる3つの広く使用されているフィルタリングユーティリティの1つであり、その他は「grepとawk」です。初心者向けのLinuxgrepコマンドとawkコマンドについてはすでに説明しました。このガイドは、初心者ユーザー向けのsedユーティリティをまとめ、Linuxやその他のUnicesを使用したテキスト処理に習熟させることを目的としています。

SEDの仕組み:基本的な理解

例を直接掘り下げる前に、sedが一般的にどのように機能するかを簡潔に理解する必要があります。 Sedは、edユーティリティの上に構築されたストリームエディタです。これにより、テキストデータのストリームに編集上の変更を加えることができます。編集には多くのLinuxテキストエディタを使用できますが、sedを使用するとより便利なものが可能になります。

sedを使用して、テキストを変換したり、重要なデータをその場で除外したりできます。この特定のタスクを非常にうまく実行することにより、Unixのコア哲学に準拠しています。さらに、sedは標準のLinuxターミナルツールおよびコマンドで非常にうまく機能します。したがって、従来のテキストエディタよりも多くのタスクに適しています。

基本的に、sedはいくつかの入力を受け取り、いくつかの操作を実行し、出力を吐き出します。入力は変更されませんが、結果が標準出力に表示されるだけです。 I / Oリダイレクトまたは元のファイルの変更により、これらの変更を簡単に永続化できます。 sedコマンドの基本的な構文を以下に示します。

sed [OPTIONS] INPUT
sed 'list of ed commands' filename

最初の行は、sedマニュアルに示されている構文です。 2つ目は理解しやすいです。現在、edコマンドに慣れていなくても心配する必要はありません。このガイド全体でそれらを学びます。

1。テキスト入力の置換

---

代替コマンドは、多くのユーザーにとってsedで最も広く使用されている機能です。これにより、テキストの一部を他のデータに置き換えることができます。このコマンドは、テキストデータの処理によく使用されます。次のように機能します。

$ echo 'Hello world!' | sed 's/world/universe/'

このコマンドは、文字列「Hellouniverse!」を出力します。 4つの基本的な部分があります。 コマンドは置換操作を示し、/。。/../は区切り文字であり、区切り文字内の最初の部分は変更が必要なパターンであり、最後の部分は置換文字列です。

2。ファイルからのテキスト入力の置換

まず、以下を使用してファイルを作成しましょう。

$ echo 'strawberry fields forever...' >> input-file
$ cat input-file

さて、イチゴをブルーベリーに置き換えたいとしましょう。次の簡単なコマンドを使用してこれを行うことができます。このコマンドのsed部分と上記のコマンドの類似点に注意してください。

$ sed 's/strawberry/blueberry/' input-file

sed部分の後にファイル名を追加しただけです。以下に示すように、最初にファイルの内容を出力してから、sedを使用して出力ストリームを編集することもできます。

$ cat input-file | sed 's/strawberry/blueberry/'

3。ファイルへの変更の保存

すでに述べたように、sedは入力データをまったく変更しません。変換されたデータを標準出力に表示するだけです。標準出力は、デフォルトではLinuxターミナルです。これは、次のコマンドを実行して確認できます。

$ cat input-file

これにより、ファイルの元のコンテンツが表示されます。ただし、変更を永続的にしたいとします。これは複数の方法で行うことができます。標準的な方法は、sedの出力を別のファイルにリダイレクトすることです。次のコマンドは、以前のsedコマンドの出力をoutput-fileという名前のファイルに保存します。

$ sed 's/strawberry/blueberry/' input-file >> output-file

これは、次のコマンドを使用して確認できます。

$ cat output-file

4。元のファイルへの変更の保存

sedの出力を元のファイルに保存したい場合はどうなりますか? -iを使用してこれを行うことができます または–インプレース このツールのオプション。以下のコマンドは、適切な例を使用してこれを示しています。

$ sed -i 's/strawberry/blueberry' input-file
$ sed --in-place 's/strawberry/blueberry/' input-file

上記のコマンドはどちらも同等であり、sedによって行われた変更を元のファイルに書き込みます。ただし、出力を元のファイルにリダイレクトすることを検討している場合は、期待どおりに機能しません。

$ sed 's/strawberry/blueberry/' input-file > input-file

このコマンドは機能しません その結果、入力ファイルは空になります。これは、シェルがコマンド自体を実行する前にリダイレクトを実行するためです。

5。区切り文字のエスケープ

従来のsedの例の多くは、区切り文字として「/」文字を使用しています。ただし、この文字を含む文字列を置き換えたい場合はどうなりますか?次の例は、sedを使用してファイル名パスを置き換える方法を示しています。バックスラッシュ文字を使用して「/」区切り文字をエスケープする必要があります。

$ echo '/usr/local/bin/dummy' >> input-file
$ sed 's/\/usr\/local\/bin\/dummy/\/usr\/bin\/dummy/' input-file > output-file

区切り文字をエスケープするもう1つの簡単な方法は、別のメタ文字を使用することです。たとえば、置換コマンドの区切り文字として「/」の代わりに「_」を使用できます。 sedは特定の区切り文字を義務付けていないため、これは完全に有効です。 「/」は、要件としてではなく、慣例により使用されます。

$ sed 's_/usr/local/bin/dummy_/usr/bin/dummy/_' input-file

6。文字列のすべてのインスタンスを置き換える

置換コマンドの興味深い特徴の1つは、デフォルトでは、各行の文字列の1つのインスタンスのみを置換することです。

$ cat << EOF >> input-file 
one two one three
two four two
three one four
EOF

このコマンドは、input-fileの内容を文字列形式のいくつかのランダムな数値に置き換えます。次に、以下のコマンドを見てください。

$ sed 's/one/ONE/' input-file

ご覧のとおり、このコマンドは、最初の行の「1」の最初の出現を置き換えるだけです。 sedを使用して単語のすべての出現箇所を置き換えるには、グローバル置換を使用する必要があります。 「g」を追加するだけです の最後の区切り文字の後 ‘。

$ sed 's/one/ONE/g' input-file

これにより、入力ストリーム全体で出現する「one」という単語がすべて置き換えられます。

7。一致した文字列を使用する

特定の文字列を括弧や引用符で囲むなど、特定のものを追加したい場合があります。探しているものが正確にわかっている場合、これは簡単に実行できます。しかし、何が見つかるか正確にわからない場合はどうなりますか? sedユーティリティは、そのような文字列を照合するためのちょっとした機能を提供します。

$ echo 'one two three 123' | sed 's/123/(123)/'

ここでは、sedsubstitutionコマンドを使用して123の周りに括弧を追加しています。ただし、特殊なメタ文字を使用することで、入力ストリーム内の任意の文字列に対してこれを行うことができます。 、次の例に示すように。

$ echo 'one two three 123' | sed 's/[a-z][a-z]*/(&)/g'

このコマンドは、入力内のすべての小文字の単語を括弧で囲みます。 「g」を省略した場合 オプションの場合、sedは最初の単語に対してのみこれを行い、すべてではありません。

8。拡張正規表現の使用

上記のコマンドでは、正規表現[a-z][a-z]*を使用してすべての小文字の単語を照合しました。 1つ以上の小文字に一致します。それらを一致させる別の方法は、メタ文字‘+’を使用することです。 。これは、拡張正規表現の例です。したがって、sedはデフォルトではそれらをサポートしません。

$ echo 'one two three 123' | sed 's/[a-z]+/(&)/g'

sedは‘+’ をサポートしていないため、このコマンドは意図したとおりに機能しません 箱から出してすぐに使えるメタ文字。オプション-Eを使用する必要があります または-r sedで拡張正規表現を有効にします。

$ echo 'one two three 123' | sed -E 's/[a-z]+/(&)/g'
$ echo 'one two three 123' | sed -r 's/[a-z]+/(&)/g'

9。複数の置換の実行

‘;’ で区切ることにより、一度に複数のsedコマンドを使用できます。 (セミコロン)。これにより、ユーザーはより堅牢なコマンドの組み合わせを作成し、その場で余分な手間を省くことができるため、非常に便利です。次のコマンドは、このメソッドを使用して一度に3つの文字列を置き換える方法を示しています。

$ echo 'one two three' | sed 's/one/1/; s/two/2/; s/three/3/'

この簡単な例を使用して、複数の置換またはその他のsed操作を実行する方法を説明しました。

10。大文字と小文字を区別せずに置き換える

sedユーティリティを使用すると、大文字と小文字を区別しない方法で文字列を置き換えることができます。まず、sedが次の簡単な置換操作をどのように実行するかを見てみましょう。

$ echo 'one ONE OnE' | sed 's/one/1/g' # replaces single one

置換コマンドは、「one」の1つのインスタンスにのみ一致するため、それを置き換えることができます。ただし、ケースに関係なく、「1」のすべての出現に一致させたいとしましょう。 sed置換操作の「i」フラグを使用してこれに取り組むことができます。

$ echo 'one ONE OnE' | sed 's/one/1/gi' # replaces all ones

11。特定の行を印刷する

「p」を使用して、入力から特定の行を表示できます 指図。入力ファイルにさらにテキストを追加して、この例を示しましょう。

$ echo 'Adding some more
text to input file
for better demonstration' >> input-file

次に、次のコマンドを実行して、「p」を使用して特定の行を印刷する方法を確認します。

$ sed '3p; 6p' input-file

出力には、行番号3と6が2回含まれている必要があります。これは私たちが期待したことではありませんよね?これは、デフォルトで、sedが入力ストリームのすべての行と、具体的に要求された行を出力するために発生します。特定の行だけを印刷するには、他のすべての出力を抑制する必要があります。

$ sed -n '3p; 6p' input-file
$ sed --quiet '3p; 6p' input-file
$ sed --silent '3p; 6p' input-file

これらのsedコマンドはすべて同等であり、入力ファイルの3行目と6行目のみを出力します。したがって、 -n のいずれかを使用して、不要な出力を抑制することができます。 、 –静か 、または –サイレント オプション。

12。行の印刷範囲

次のコマンドは、入力ファイルから一連の行を出力します。記号‘、’ sedの入力範囲を指定するために使用できます。

$ sed -n '2,4p' input-file
$ sed --quiet '2,4p' input-file
$ sed --silent '2,4p' input-file

これら3つのコマンドはすべて同等です。入力ファイルの2行目から4行目を印刷します。

13。連続していない行を印刷する

単一のコマンドを使用して、テキスト入力から特定の行を印刷したいとします。このような操作は2つの方法で処理できます。 1つ目は、‘;’を使用して複数の印刷操作を結合することです。 セパレーター。

$ sed -n '1,2p; 5,6p' input-file

このコマンドは、input-fileの最初の2行を出力し、その後に最後の2行を出力します。 -eを使用してこれを行うこともできます sedのオプション。構文の違いに注意してください。

$ sed -n -e '1,2p' -e '5,6p' input-file

14。 N行ごとに印刷

入力ファイルから1行おきに表示したいとします。 sedユーティリティは、チルダ‘〜’ を提供することにより、これを非常に簡単にします。 オペレーター。次のコマンドをざっと見て、これがどのように機能するかを確認してください。

$ sed -n '1~2p' input-file

このコマンドは、入力の最初の行の後に2行おきに印刷することで機能します。次のコマンドは、単純なipコマンドの出力から2行目とそれに続く3行ごとに出力します。

$ ip -4 a | sed -n '2~3p'

15。範囲内のテキストの置換

印刷したのと同じ方法で、指定した範囲内でのみ一部のテキストを置き換えることもできます。次のコマンドは、sedを使用して入力ファイルの最初の3行で「1」を1に置き換える方法を示しています。

$ sed '1,3 s/one/1/gi' input-file

このコマンドは、他の「1つ」に影響を与えません。このファイルに1つを含む行をいくつか追加して、自分で確認してみてください。

16。入力からの行の削除

edコマンド‘d’ テキストストリームまたは入力ファイルから特定の行または行の範囲を削除できます。次のコマンドは、sedの出力から最初の行を削除する方法を示しています。

$ sed '1d' input-file

sedは標準出力にのみ書き込むため、この削除は元のファイルには反映されません。同じコマンドを使用して、複数行のテキストストリームから最初の行を削除できます。

$ ps | sed '1d'

したがって、「d」を使用するだけです 行アドレスの後にコマンドを入力すると、sedの入力を抑制できます。

17。入力から行の範囲を削除する

「d」の横に「、」演算子を使用すると、行の範囲を簡単に削除できます。 オプション。次のsedコマンドは、入力ファイルの最初の3行を抑制します。

$ sed '1,3d' input-file

次のいずれかのコマンドを使用して、連続していない行を削除することもできます。

$ sed '1d; 3d; 5d' input-file

このコマンドは、入力ファイルの2行目、4行目、および最後の行を表示します。次のコマンドは、単純なLinuxipコマンドの出力から任意の行を省略しています。

$ ip -4 a | sed '1d; 3d; 4d; 6d'

18。最後の行を削除する

sedユーティリティには、テキストストリームまたは入力ファイルから最後の行を削除できる簡単なメカニズムがあります。 「$」です シンボルであり、削除と一緒に他のタイプの操作にも使用できます。次のコマンドは、入力ファイルから最後の行を削除します。

$ sed '$d' input-file

多くの場合、事前に行数を知っている可能性があるため、これは非常に便利です。これは、パイプライン入力でも同様に機能します。

$ seq 3 | sed '$d'

19。特定の行を除くすべての行を削除する

もう1つの便利なsed削除の例は、コマンドで指定された行を除くすべての行を削除することです。これは、テキストストリームまたは他のLinuxターミナルコマンドの出力から重要な情報を除外するのに役立ちます。

$ free | sed '2!d'

このコマンドは、2行目にあるメモリ使用量のみを出力します。以下に示すように、入力ファイルでも同じことができます。

$ sed '1,3!d' input-file

このコマンドは、入力ファイルから最初の3行を除くすべての行を削除します。

20。空白行の追加

入力ストリームが集中しすぎる場合があります。このような場合、sedユーティリティを使用して、入力の間に空白行を追加できます。次の例では、psコマンドの出力のすべての行の間に空白行を追加します。

$ ps aux | sed 'G'

「G」 コマンドはこの空白行を追加します。複数の「G」を使用して、複数の空白行を追加できます sedのコマンド。

$ sed 'G; G' input-file

次のコマンドは、特定の行番号の後に空白行を追加する方法を示しています。入力ファイルの3行目の後に空白行が追加されます。

$ sed '3G' input-file

21。特定の行のテキストを置き換える

sedユーティリティを使用すると、ユーザーは特定の行のテキストを置き換えることができます。これは、さまざまなシナリオで役立ちます。入力ファイルの3行目の「one」という単語を置き換えたいとします。次のコマンドを使用してこれを行うことができます。

$ sed '3 s/one/1/' input-file

「3」 「s」の開始前 コマンドは、3行目にある単語のみを置き換えることを指定します。

22。文字列のN番目の単語を置き換える

sedコマンドを使用して、特定の文字列のパターンのn番目のオカレンスを置き換えることもできます。次の例は、bashの1行の例を使用してこれを示しています。

$ echo 'one one one one one one' | sed 's/one/1/3'

このコマンドは、3番目の「1」を数字の1に置き換えます。これは、入力ファイルの場合と同じように機能します。次のコマンドは、入力ファイルの2行目の最後の「2」を置き換えます。

$ cat input-file | sed '2 s/two/2/2'

最初に2行目を選択してから、変更するパターンの出現箇所を指定します。

23。新しい行の追加

コマンド‘a’ を使用すると、入力ストリームに新しい行を簡単に追加できます。 。以下の簡単な例をチェックして、これがどのように機能するかを確認してください。

$ sed 'a new line in input' input-file

上記のコマンドは、元の入力ファイルの各行の後に文字列「入力の改行」を追加します。ただし、これは意図したものではない可能性があります。次の構文を使用して、特定の行の後に新しい行を追加できます。

$ sed '3 a new line in input' input-file

24。新しい行の挿入

行を追加する代わりに挿入することもできます。次のコマンドは、入力の各行の前に新しい行を挿入します。

$ seq 5 | sed 'i 888'

「i」 コマンドを実行すると、文字列888がseqの出力の各行の前に挿入されます。特定の入力行の前に行を挿入するには、次の構文を使用します。

$ seq 5 | sed '3 i 333'

このコマンドは、実際に3つを含む行の前に番号333を追加します。これらは行挿入の簡単な例です。パターンを使用して線を一致させることにより、文字列を簡単に追加できます。

25。入力行の変更

「c」を使用して、入力ストリームの行を直接変更することもできます。 sedユーティリティのコマンド。これは、置き換える行が正確にわかっていて、正規表現を使用してその行と一致させたくない場合に役立ちます。次の例は、seqコマンドの出力の3行目を変更します。

$ seq 5 | sed '3 c 123'

3行目の内容である3を123に置き換えます。次の例は、「c」を使用して入力ファイルの最後の行を変更する方法を示しています。 。

$ sed '$ c CHANGED STRING' input-file

変更する行番号を選択するために正規表現を使用することもできます。次の例はこれを示しています。

$ sed '/demo*/ c CHANGED TEXT' input-file

26。入力用のバックアップファイルの作成

一部のテキストを変換して変更を元のファイルに保存する場合は、先に進む前にバックアップファイルを作成することを強くお勧めします。次のコマンドは、入力ファイルに対していくつかのsed操作を実行し、元のファイルとして保存します。さらに、予防措置としてinput-file.oldというバックアップを作成します。

$ sed -i.old 's/one/1/g; s/two/2/g; s/three/3/g' input-file

-i オプションは、sedによって行われた変更を元のファイルに書き込みます。 .oldサフィックス部分は、input-file.oldドキュメントの作成を担当します。

27。パターンに基づいた線の印刷

たとえば、特定のパターンに基づいて入力からすべての行を印刷したいとします。これは、sedコマンドを組み合わせるとかなり簡単です「p」 -nを使用 オプション。次の例は、入力ファイルを使用してこれを示しています。

$ sed -n '/^for/ p' input-file

このコマンドは、各行の先頭にある「for」パターンを検索し、それで始まる行のみを出力します。 ‘^’ 文字は、アンカーと呼ばれる特別な正規表現文字です。パターンを行の先頭に配置する必要があることを指定します。

28。 GREPの代替としてSEDを使用する

Linuxのgrepコマンドは、ファイル内の特定のパターンを検索し、見つかった場合はその行を表示します。 sedユーティリティを使用してこの動作をエミュレートできます。次のコマンドは、簡単な例を使用してこれを示しています。

$ sed -n 's/strawberry/&/p' /usr/share/dict/american-english

このコマンドは、アメリカ英語でイチゴという単語を検索します 辞書ファイル。パターンイチゴを検索し、一致した文字列を「p」の横に使用することで機能します。 それを印刷するコマンド。 -n フラグは、出力の他のすべての行を抑制します。次の構文を使用すると、このコマンドをより簡単にすることができます。

$ sed -n '/strawberry/p' /usr/share/dict/american-english

29。ファイルからのテキストの追加

「r」 sedユーティリティのコマンドを使用すると、ファイルから読み取ったテキストを入力ストリームに追加できます。次のコマンドは、seqコマンドを使用してsedの入力ストリームを生成し、input-fileに含まれるテキストをこのストリームに追加します。

$ seq 5 | sed 'r input-file'

このコマンドは、seqによって生成された連続する各入力シーケンスの後に、入力ファイルの内容を追加します。次のコマンドを使用して、seqによって生成された番号の後にコンテンツを追加します。

$ seq 5 | sed '$ r input-file'

次のコマンドを使用して、入力のn行目の後にコンテンツを追加できます。

$ seq 5 | sed '3 r input-file'

30。ファイルへの変更の書き込み

Webアドレスのリストを含むテキストファイルがあるとします。たとえば、www、https、httpで始まるものもあります。 wwwで始まるすべてのアドレスをhttpsで始まるように変更し、変更されたアドレスのみをまったく新しいファイルに保存できます。

$ sed 's/www/https/ w modified-websites' websites

ここで、ファイルmodified-websitesの内容を調べると、sedによって変更されたアドレスのみが見つかります。 「wファイル名」 ‘オプションを指定すると、sedは指定されたファイル名に変更を書き込みます。大きなファイルを処理していて、変更されたデータを個別に保存したい場合に便利です。

31。 SEDプログラムファイルの使用

場合によっては、特定の入力セットに対していくつかのsed操作を実行する必要があります。このような場合は、さまざまなsedスクリプトをすべて含むプログラムファイルを作成することをお勧めします。次に、 -f を使用して、このプログラムファイルを呼び出すことができます。 sedユーティリティのオプション。

$ cat << EOF >> sed-script
s/a/A/g
s/e/E/g
s/i/I/g
s/o/O/g
s/u/U/g
EOF

このsedプログラムは、すべての小文字の母音を大文字に変更します。以下の構文を使用してこれを実行できます。

$ sed -f sed-script input-file
$ sed --file=sed-script < input-file

32。複数行のSEDコマンドの使用

複数行にまたがる大規模なsedプログラムを作成している場合は、それらを適切に引用する必要があります。構文は、Linuxシェルごとにわずかに異なります。幸いなことに、Bourne Shellとその派生物(bash)は非常に簡単です。

$ sed '
s/a/A/g 
s/e/E/g 
s/i/I/g 
s/o/O/g 
s/u/U/g' < input-file

Cシェル(csh)などの一部のシェルでは、円記号(\)文字を使用して引用符を保護する必要があります。

$ sed 's/a/A/g \
s/e/E/g \
s/i/I/g \
s/o/O/g \
s/u/U/g' < input-file

33。行番号の印刷

特定の文字列を含む行番号を印刷したい場合は、パターンを使用してその行番号を検索し、非常に簡単に印刷できます。このためには、‘=’を使用する必要があります sedユーティリティのコマンド。

$ sed -n '/ion*/ =' < input-file

このコマンドは、入力ファイルで指定されたパターンを検索し、その行番号を標準出力に出力します。 grepとawkを組み合わせてこれに取り組むこともできます。

$ cat -n input-file | grep 'ion*' | awk '{print $1}'

次のコマンドを使用して、入力の合計行数を出力できます。

$ sed -n '$=' input-file

34。シンボリックリンクの上書きの防止

sed ‘i’ または‘– in-place ‘コマンドは、多くの場合、システムリンクを通常のファイルで上書きします。これは多くの場合望ましくない状況であるため、ユーザーはこれが発生しないようにする必要があります。幸い、sedには、シンボリックリンクの上書きを無効にするための簡単なコマンドラインオプションが用意されています。

$ echo 'apple' > fruit
$ ln --symbolic fruit fruit-link
$ sed --in-place --follow-symlinks 's/apple/banana/' fruit-link
$ cat fruit

したがって、 –follow-symlinks を使用すると、シンボリックリンクの上書きを防ぐことができます。 sedユーティリティのオプション。このようにして、テキスト処理の実行中にシンボリックリンクを保持できます。

35。 / etc/passwdからすべてのユーザー名を印刷する

/ etc / passwd ファイルには、Linuxのすべてのユーザーアカウントのシステム全体の情報が含まれています。単純なワンライナーsedプログラムを使用して、このファイルで使用可能なすべてのユーザー名のリストを取得できます。以下の例をよく見て、これがどのように機能するかを確認してください。

$ sed 's/\([^:]*\).*/\1/' /etc/passwd

正規表現パターンを使用して、このファイルから最初のフィールドを取得し、他のすべての情報を破棄しました。これは、ユーザー名が / etc / passwdにある場所です。 ファイル。

36。入力からコメント行を削除する

多くのシステムツールやサードパーティのアプリケーションには、構成ファイルが付属しています。これらのファイルには通常、パラメータを詳細に説明するコメントが多数含まれています。ただし、元のコメントをそのままにして、構成オプションのみを表示したい場合があります。

$ cat ~/.bashrc | sed -e 's/#.*//;/^$/d'

このコマンドは、コメントされた行をbash構成ファイルから削除します。コメントは、前に「#」記号を使用してマークされます。そのため、単純な正規表現パターンを使用して、このような行をすべて削除しました。コメントが別の記号を使用してマークされている場合は、上記のパターンの「#」をその特定の記号に置き換えてください。

$ cat ~/.vimrc | sed -e 's/".*//;/^$/d'

これにより、二重引用符(“)記号で始まるvim構成ファイルからコメントが削除されます。

37。入力からの空白の削除

多くのテキストドキュメントは不要な空白で埋められています。多くの場合、これらは不適切なフォーマットの結果であり、ドキュメント全体を台無しにする可能性があります。幸いなことに、sedを使用すると、ユーザーはこれらの不要な間隔を非常に簡単に削除できます。次のコマンドを使用して、入力ストリームから先頭の空白を削除できます。

$ sed 's/^[ \t]*//' whitespace.txt

このコマンドは、ファイルwhitespace.txtからすべての先頭の空白を削除します。末尾の空白を削除する場合は、代わりに次のコマンドを使用してください。

$ sed 's/[ \t]*$//' whitespace.txt

sedコマンドを使用して、先頭と末尾の両方の空白を同時に削除することもできます。以下のコマンドを使用して、このタスクを実行できます。

$ sed 's/^[ \t]*//;s/[ \t]*$//' whitespace.txt

38。 SEDを使用したページオフセットの作成

フロントパディングがゼロの大きなファイルがある場合は、そのファイルのページオフセットを作成することをお勧めします。ページオフセットは、入力行を簡単に読み取るのに役立つ単なる先頭の空白です。次のコマンドは、5つの空白スペースのオフセットを作成します。

$ sed 's/^/ /' input-file

間隔を増減するだけで、別のオフセットを指定できます。次のコマンドは、3行の空白行でページオフセットを減らします。

$ sed 's/^/ /' input-file

39。入力行を逆にする

次のコマンドは、sedを使用して入力ファイルの行の順序を逆にする方法を示しています。 Linuxのtacの動作をエミュレートします コマンド。

$ sed '1!G;h;$!d' input-file

このコマンドは、入力行ドキュメントの行を逆にします。別の方法を使用して行うこともできます。

$ sed -n '1!G;h;$p' input-file

40。入力文字を逆にする

sedユーティリティを使用して、入力行の文字を逆にすることもできます。これにより、入力ストリーム内の連続する各文字の順序が逆になります。

$ sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' input-file

このコマンドは、Linuxの revの動作をエミュレートします 指図。上記のコマンドの後に以下のコマンドを実行することで、これを確認できます。

$ rev input-file

41。入力行のペアを結合する

次の単純なsedコマンドは、入力ファイルの2つの連続する行を1行として結合します。分割行を含む大きなテキストがある場合に便利です。

$ sed '$!N;s/\n/ /' input-file
$ tail -15 /usr/share/dict/american-english | sed '$!N;s/\n/ /'

多くのテキスト操作タスクで役立ちます。

42。入力のN行ごとに空白行を追加する

sedを使用すると、入力ファイルのn行ごとに空白行を非常に簡単に追加できます。次のコマンドは、input-fileの3行ごとに空白行を追加します。

$ sed 'n;n;G;' input-file

以下を使用して、1行おきに空白行を追加します。

$ sed 'n;G;' input-file

43。最後のN行目を印刷する

以前は、sedコマンドを使用して、行番号、範囲、およびパターンに基づいて入力行を印刷していました。 sedを使用して、ヘッドコマンドまたはテールコマンドの動作をエミュレートすることもできます。次の例では、入力ファイルの最後の3行を出力します。

$ sed -e :a -e '$q;N;4,$D;ba' input-file

これは、以下のtailコマンドtail-3input-fileに似ています。

44。特定の文字数を含む行を印刷する

文字数に基づいて行を印刷するのは非常に簡単です。次の簡単なコマンドは、15文字以上の行を出力します。

$ sed -n '/^.\{15\}/p' input-file

以下のコマンドを使用して、20文字未満の行を印刷します。

$ sed -n '/^.\{20\}/!p' input-file

次の方法を使用して、これをより簡単な方法で行うこともできます。

$ sed '/^.\{20\}/d' input-file

45。重複する行を削除する

次のsedの例は、Linuxの uniqの動作をエミュレートする方法を示しています。 指図。入力から2つの連続する重複行を削除します。

$ sed '$!N; /^\(.*\)\n\1$/!P; D' input-file

ただし、入力がソートされていない場合、sedは重複する行をすべて削除することはできません。 sortコマンドを使用してテキストを並べ替えてから、パイプを使用して出力をsedに接続できますが、行の方向が変更されます。

46。 Deleting All Blank Lines

If your text file contains a lot of unnecessary blank lines, you may delete them using the sed utility. The below command demonstrates this.

$ sed '/^$/d' input-file
$ sed '/./!d' input-file

Both of these commands will delete any blank lines present in the specified file.

47. Deleting Last Lines of Paragraphs

You can delete the last line of all paragraphs using the following sed command. We will use a dummy filename for this example. Replace this with the name of an actual file that contains some paragraphs.

$ sed -n '/^$/{p;h;};/./{x;/./p;}' paragraphs.txt

48. Displaying the Help Page

The help page contains summarized information on all available options and usage of the sed program. You can invoke this by using the following syntax.

$ sed -h
$ sed --help

You can use any of these two commands to find a nice, compact overview of the sed utility.

49. Displaying the Manual Page

The manual page provides an in-depth discussion of sed, its usage, and all available options. You should read this carefully to understand sed clearly.

$ man sed

50. Displaying Version Information

The –version option of sed allows us to view which version of sed is installed in our machine. It is useful when debugging errors and reporting bugs.

$ sed --version

The above command will display the version information of the sed utility in your system.

終わりの考え

The sed command is one of the most widely used text manipulation tools provided by Linux distributions. It is one of the three primary filtering utilities in Unix, alongside grep and awk. We have outlined 50 simple yet useful examples to help readers get started with this amazing tool. We highly recommend users to try these commands themselves to gain practical insights. Additionally, try tweaking the examples given in this guide and examine their effect. It will help you master sed quickly. Hopefully, you’ve learned the basics of sed clearly. Don’t forget to comment below if you’ve any questions.


Linux
  1. Linux Sedコマンド:使用法と例

  2. Linuxでのcpコマンド:7つの実用的な例

  3. Linuxシャットダウンコマンド:5つの実用的な例

  1. Linuxでの解凍コマンドの実用例

  2. Linuxでのddコマンドの5つの実用例

  3. 10 実用的な Linux nm コマンドの例

  1. LinuxWatchコマンド+例とは何ですか

  2. Linuxでの「cd」コマンドの5つの実用例

  3. Linux での sed コマンドの例