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

LinuxでSedコマンドを使用する方法と例

「ストリームエディタ」と略されるSEDは、検索、検索、置換、挿入などのファイルに対して多くの機能を実行できる強力なテキストストリームエディタです。 sedコマンドは正規表現対応コマンドであり、提供されている正規表現を理解できることを意味します。

ただし、SEDは主にまたは主にテキスト置換に使用されます。 SEDを使用すると、ファイルを開かずに編集できます。これにより、ファイルを開いて変更するよりも、ファイル内のファイルをすばやく見つけて置き換えることができます。

このチュートリアルでは、Linuxシェルでの使いやすく理解しやすい例を使用してSEDコマンドを学習します。

Sedコマンド構文

sedコマンドの構文は非常に簡単に理解できますが、非常に強力に使用できます。 SEDの基本的な構文は次のとおりです:

sed OPTIONS... [SCRIPT] [INPUTFILE...]

sed examplesコマンドの入力として、以下のテキストファイル('content.txt')を検討してください。

$ cat > content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

以下は、最もよく使用されるsedの例です。

1。文字列(単語または文字)の置き換え

Sedを使用して、入力の文字列(単語または文字)を検索して置き換えることができます。オプションs 文字列を置き換えるために使用されます。デフォルトでは、sedコマンドは行の最初の文字列のみを置き換えます。

次のコマンドは、各行の最初の出現箇所で、「content.txt」ファイルの「lorem」という単語を「Lorem」に置き換えます。

$ sed's / lorem / Lorem /'content.txt

ここで、「lorem」は検索文字列であり、「Lorem」は置換文字列です。

Output
$ sed 's/lorem/Lorem/' content.txt
Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

2。ファイル内のすべての文字列を置き換えます

ファイル内の文字列のすべての出現箇所を検索して置き換えるには、/gを使用します (グローバル置換)フラグ。

次のコマンドで、/g フラグは、ファイル「content.txt」内の文字列「lorem」のすべての出現箇所を「Lorem」に置き換えるために使用されます。

$ sed 's/lorem/Lorem/g' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.

3。行内のパターンのn番目の出現を置き換える

sedコマンドは/1で使用できます 、/2 またはn (任意の数)行内の文字列の最初、2番目、またはn番目の出現箇所を置き換えます。

次のコマンドは、各行で2番目に出現する単語「lorem」を「Lorem」に置き換えます。

$ sed 's/lorem/Lorem/2' content.txt

lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.

trコマンドと同様に、sedは、y/set1/set2/を使用して、set1内のすべての出現文字をset2内の対応する文字に置き換えることができます。 。

$ echo 'a for apple' | sed -e 'y/af/AF/
Output
A For Apple

4。 n番目のオカレンスから各行のすべてのオカレンスに置き換えます

/1の組み合わせを使用できます 、/2 またはn (任意の数)および/g 各行にn番目に出現する文字列のすべてのパターンを置き換えます。

次の例では、文字列「lorem」のすべての出現箇所が、各行の2番目の出現箇所からの「Lorem」に置き換えられます。

$ sed 's/lorem/Lorem/2g' content.txt
lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.

5。指定された行番号の文字列を検索して置換します

sedを使用すると、特定の行番号の文字列を置き換えるためにのみ関数を制限できます。

次のコマンドでは、2行目だけが文字列「Lorem」に置き換えられていることがわかります。

$ sed '2 s/lorem/Lorem/' content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

6。ファイルのテキストの一部を表示する

sedコマンドを使用すると、ファイル全体ではなく、ファイルの一部を表示できます。 -n オプションは、すべてのコンテンツとpの印刷を抑制するために使用されます オプションは特定の行を印刷するために使用されます。

次のコマンドは、2から4までの行を出力します。

$ sed -n 2,4p content.txt
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

7。特定の行を除くすべてのコンテンツを表示する

Sedコマンドを使用すると、特定の行を除くファイルのすべての内容を表示できます。次のコマンドで、1行目と2行目を除くファイル'content.txt'のすべてのコンテンツを表示します。

$ sed 1,2d content.txt
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

8。パターンマッチングラインを除くすべてのラインを表示する

次のsedコマンドを使用して、言及されている検索パターンを持つ行を削除できます。出力では、検索パターンに一致するため、「learn」の行が削除されます。

$ sed '/learn/d' content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

9。置き換えられた行を表示する

置き換えられた行を印刷するために、/pを使用します -nとともにフラグを立てる 。

出力では、検索パターン「lorem」がなかったため、最後の行がないことがわかります。

$ sed -n 's/lorem/Lorem/p' content.txt

Lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

「p」および「n」フラグのその他の例

最初の行を印刷

$ sed -n '1p' content.txt

行の範囲を印刷

$ sed -n '1,4p' content.txt

複数行を印刷する

$ sed -n '1p;4p' content.txt

ファイルを印刷する

$ sed -n 'p' content.txt

印刷に正規表現または単語が含まれている

$ sed -n '/RedHat/p' content.txt

数字が含まれている場合は印刷

$ sed -n '/[0-9]/p' content.txt

正規表現を一致させて置き換えます

$ sed -n 's/^L/Matched--&/p' content.txt
Output
Matched--Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Matched--Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Matched--Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.

grepのようにsedを使用する

次のsedコマンドは、「/ etc/passwd」ファイルでユーザー「root」を検索します。

$ sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

10。 SEDコマンドを組み合わせる

複数のsed式を実行する必要がある場合は、eを使用する必要があります sedコマンドをチェーンするオプション。

例を見てみましょう。出現するすべての「lorem」を「Lorem」に置き換え、検索パターンに一致する行を削除します。

$ sed -e 's/lorem/Lorem/g' -e '/learn/d' content.txt

Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.

11。各行の後に空白行を挿入します

Gを使用する オプションで、ファイルに1行または複数の空白行を挿入できます。

次のコマンドは、行の間に1行の空白行を挿入します。

$ sed G content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.

lorem ipsum is highly used by designers. lorem ipsum is great for developers.

lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

learn more about dummy text.

2つの空白行を挿入するには、次のコマンドを実行します。

$ sed 'G;G' content.txt

lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.

lorem ipsum is highly used by designers. lorem ipsum is great for developers.

lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.

learn more about dummy text.

11。元のファイルのバックアップコピーを編集して作成します

Sedを使用すると、ファイルを編集すると同時に、元のファイルのバックアップコピーを作成できます。バックアップファイル名には「i。<ファイル拡張子>」を使用し、-eを使用します。 編集。

次のコマンドは、元のファイル「content.txt」のバックアップを「content.txt.bak」として作成します

$ sed -i.bak -e 's/lorem/Lorem/g' content.txt
Results
$ cat content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
learn more about dummy text.
$ cat content.txt.bak
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

12。パターンのある行を削除する

このsedコマンドを使用すると、特定の文字列で始まり、別の文字列で終わる行を削除できます。次の出力では、「lorem」で始まり「text」で終わる行です。削除されます:

$ sed -e 's/^lorem.*text.$//g' content.txt
Output
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.

13。行に文字列を追加する

正規表現を使用してすべての行の前にコンテンツを追加するために、次のコマンドを実行できます。

次の出力では、すべての行の前に「Here」が追加されていることがわかります。

$ sed -e 's/.*/Here &/' content.txt
Here lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
Here lorem ipsum is highly used by designers. lorem ipsum is great for developers.
Here lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
Here learn more about dummy text.

各行の前に文字列を挿入します:

$ sed 'i \inserted line' content.txt
inserted line
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
inserted line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
inserted line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
inserted line
learn more about dummy text.

各行の後に文字列を追加します:

$ sed 'a \Appended line' content.txt
Lorem ipsum is a dummy text. Lorem ipsum has been the industry's standard dummy text.
Appended line
Lorem ipsum is highly used by designers. Lorem ipsum is great for developers.
Appended line
Lorem ipsum is used for dummy text. Lorem ipsum doesn't have meaning.
Appended line
learn more about dummy text.
Appended line

14。 / etc/passwdファイルからユーザー名を抽出します

Sedコマンドを使用すると、「/ etc/passwd」ファイルからすべてのユーザー名のすべてのリストを簡単に取得できます。

次のsedコマンドは、Linuxで使用可能なすべてのユーザー名を抽出します。

$ sed 's/\([^:]*\).*/\1/' /etc/passwd
root
daemon
bin
sys
sync
man
lp
news
uucp
proxy
backup
list
gnats
nobody
systemd-network
systemd-resolve
syslog
messagebus
uuidd
debian-spamd
admin

15。コメント行(#)と空行のない行を印刷する

コメント(#)行なしで印刷し、空の行はsedを使用すると簡単です。

次のコマンドを実行して、コメント記号(#)を含まないすべての行とすべての空の行を印刷できます。

$ sed -e 's/#.*//;/^$/d' content.txt

コメント行のみを削除するには:

$ sed -e 's/#.*//' content.txt

16。文字列からsedを使用してすべてのIPアドレスを抽出します

正規表現でsedコマンドを使用してIPアドレスを抽出する方法を確認しましょう。テスト用に「content.txt」にいくつかのIPアドレスを追加しました。

$ cat content.txt
lorem ipsum is a dummy text. lorem ipsum has been the industry's standard dummy text.
lorem ipsum is highly used by designers. lorem ipsum is great for developers.
lorem ipsum is used for dummy text. lorem ipsum doesn't have meaning.
learn more about dummy text.
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137

次に、正規表現を使用して、次のように「content.txt」ファイルからIPアドレスを抽出します。

$ sed '/\n/!s/[0-9.]\+/\n&\n/;/^\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\n/P;D' content.txt
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137

同じ結果を得る別の簡単なコマンドを見つけました。以下を確認してください:

$ sed -n '/[0-9]/p' content.txt.bak
122.65.49.2
221.11.165.233
219.158.9.97
219.158.19.137

パイプ(|)を使用してsedを他のコマンドと組み合わせることもできます。以下の例を確認してください:

$ ip addr | sed -n '/inet/p' | sed -e 's/  */ /g' | cut -d ' ' -f3
127.0.0.1/8
::1/128
75.208.225.10/24
2600:3c02::e03c:92ff:fe60:d7e2/64
fe80::f03c:92ef:fe60:d7e2/64

17。リダイレクトしてファイルに書き込む

w 標準出力に出力する代わりに、フラグを使用して出力をファイルに書き込むことができます。 w コマンドには、出力が書き込まれるファイル名が必要です。

次のsedコマンドは、出力を新しいファイル'rootpwd.txt'にリダイレクトします。

$ sed -n '/root/w rootpwd.txt' /etc/passwd
$ cat rootpwd.txt
root:x:0:0:root:/root:/bin/bash

結論

このLinuxコマンドチュートリアルでは、sedコマンドの基本的な構文と、最も一般的で頻繁に使用されるsedの例を学びました。 sed in bashまたはシェルスクリプトを使用して、Linuxシェルでのテキスト操作およびsed操作でさまざまな自動化されたタスクを実行できます。このチュートリアルを使用すると、sedを簡単に理解し、必要に応じてすぐに実装を開始できます。ご質問、ご提案、フィードバックがございましたら、下のコメントボックスにご記入ください。


Linux
  1. LinuxでのSCPコマンド:使用方法と例

  2. LinuxでVmstatコマンドを使用する方法を例で説明します

  3. 例を使用してLinuxでDigコマンドを使用する方法

  1. 実用的な例でLinuxHexdumpコマンドを使用する方法

  2. Linuxでパイプと名前付きパイプを使用する方法(例付き)

  3. 例を使用してLinuxでRmmodコマンドを使用する方法

  1. 例を使用してLinuxでsuコマンドを使用する方法

  2. 例でLinuxシャットダウンコマンドを使用する方法

  3. 例を使用してLinuxでwコマンドを使用する方法