Linux sedコマンドの使用

Linux sedコマンドの使用

1. 機能紹介

sed (Stream EDitor) は、コンテンツを 1 行ずつ処理するストリーム ファイル エディターです。処理中、現在処理中の行は「パターン スペース」と呼ばれる一時バッファに保存されます。次に、sed コマンドを使用してバッファの内容を処理します。処理が完了すると、バッファの内容が画面に送信され、ファイルの最後まで次の行が処理されます。 -i オプションを使用しない限り、ファイルの内容は変更されません。 sed は主に、1 つ以上のファイルを編集したり、ファイルに対する繰り返し操作を簡素化したり、変換プログラムを作成したりするために使用されます。

sed の機能は awk と似ていますが、違いは sed の方が単純で列処理機能がそれほど強力ではないのに対し、awk の方が複雑で列処理機能が強力である点です。

2. コマンド形式

sed [オプション]... {他のスクリプトがない場合のみのスクリプト} [入力ファイル]...

OPTION はコマンドオプション、script-only-if-no-other-script は処理アクションで、-e で複数指定できます。input-file は入力ファイルで、複数指定できます。

3. オプションの説明

オプション:
-n、--quiet、--silent: 静音モードを使用します。 sed の一般的な使用法では、通常、STDIN からのすべてのデータが端末に出力されます。-n を追加すると、sed によって特別に処理された行だけがリストされます。
-e <script>,--expression=<script>: sed アクションを指定します。複数の -e で複数のアクションを指定できます。
-f <スクリプト ファイル>、--file=<スクリプト ファイル>: sed アクションをファイルに直接書き込みます。-f ファイル名はファイル名内の sed アクションを実行できます。
-r、--regexp-extended: sed は拡張正規表現をサポートします (デフォルトは基本正規表現です)。
-i: 読み取ったファイルの内容を端末に出力するのではなく、直接変更します。
--help: ヘルプを表示します。
--version: バージョンを表示します。

アクションの説明: [n1[,n2]]関数
n1、n2: 存在しない場合があります。通常は「アクションを実行する行数を選択する」ことを表します。たとえば、アクションを 10 行から 20 行の間で実行する必要がある場合は、「10,20 アクション動作」と記述します。

関数:
a : 追加されました。a の後に文字列を続けることができ、これらの文字列は新しい行 (現在の行の次の行) に表示されます。
c: 置換。c の後に文字列を続けると、n1 と n2 の間の行を置き換えることができます。
d: 削除。削除を意味するので、通常は d の後に何も入りません。
i : 挿入。i の後に文字列を続けることができ、これらの文字列は新しい行 (現在の行の前の行) に表示されます。
p: 印刷、つまり選択したデータを印刷します。通常、pはパラメータsed -n~で実行されます。
s: 置換。通常、この s アクションは正規表現で使用できます。たとえば、1,20s/old/new/g などです。

4. 典型的な例

4.1 行削除操作

(1)/etc/passwdの内容を一覧し、行番号を出力します。同時に、2行目から5行目を削除します。

[b3335@MIC ~]$ nl -n ln /etc/passwd | sed '2,5d'
 ルート:x:0:0:root:/root:/bin/bash
 同期:x:5:0:sync:/sbin:/bin/sync
 シャットダウン:x:6:0:シャットダウン:/sbin:/sbin/シャットダウン
.....(以下略).....

注意: 本来は sed -e を発行する必要があります。アクションが 1 つだけの場合には -e なしでも問題ありませんが、アクションが複数ある場合には -e オプションを使用してアクションを指定する必要があります。また、sed に続くアクションは 2 つの一重引用符で囲む必要があることにも注意してください。

(2)2行目を削除するだけです。

/etc/passwd | sed '2d' を実行します

(3)最後から3行目を削除する

/etc/passwd | sed '3,$d' を実行します

4.2 行追加操作

(1)2行目の後に「私はお茶を飲むのが好きです」と付け加えます。

[b3335@MIC ~]$ nl -n ln /etc/passwd | sed '2a 私はお茶を飲むのが好きです'
 ルート:x:0:0:root:/root:/bin/bash
 bin:x:1:1:bin:/bin:/sbin/ログインなし
私はお茶を飲むのが好きです
 デーモン:x:2:2:デーモン:/sbin:/sbin/nologin
.....(以下略).....

(2)2行目より前に追加する場合は、

nl /etc/passwd | sed 'お茶を飲む'
// または nl /etc/passwd | sed '1a drink tea'

(3)2行目の後に「私はお茶を飲むのが好きです」と「私はビールを飲むのが好きです」という2行を追加します。

[b3335@MIC ~]$ nl -n ln /etc/passwd | sed '2a 私はお茶を飲むのが好きです\n私はビールを飲むのが好きです'
  ルート:x:0:0:root:/root:/bin/bash
  bin:x:1:1:bin:/bin:/sbin/ログインなし
私はお茶を飲むのが好きです
私はビールを飲むのが好きです
  デーモン:x:2:2:デーモン:/sbin:/sbin/nologin
…(以下省略)…

または、バックスラッシュ \ を使用して各行を区切り、次のようにコマンド ラインに複数行のコマンドを入力することもできます。

[b3335@MIC ~]$ nl -n ln /etc/passwd | sed '2a 私はお茶を飲むのが好きです\
> ビールを飲むのが好きです

4.3 ライン交換操作

(1)2行目から5行目の内容を「2~5番号」に置き換える。

[b3335@MIC ~]$ nl -nln /etc/passwd | sed '2,5c No 2-5 番号'
  ルート:x:0:0:root:/root:/bin/bash
2-5番
  同期:x:5:0:sync:/sbin:/bin/sync
.....(以下略).....

4.4 ライン印刷の選択

(1)/etc/passwdファイルの5行目から7行目のみをリストします。

[root@www ~]# nl -nln /etc/passwd | sed -n '5,7p'
 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
 同期:x:5:0:sync:/sbin:/bin/sync
 シャットダウン:x:6:0:シャットダウン:/sbin:/sbin/シャットダウン

4.5 データの検索と関連操作の実行

(1)データの検索と表示

/etc/passwd でキーワード root を含む行を検索し、出力します。

[b3335@MIC ~]$ nl /etc/passwd | sed -n '/root/p'
 ルート:x:0:0:root:/root:/bin/bash
 オペレータ:x:11:0:オペレータ:/root:/sbin/nologin

(2)データを検索して削除する /etc/passwd内のrootを含む行をすべて削除し、残りの行を出力します。

[b3335@MIC ~]$ nl /etc/passwd | sed '/root/d'
 デーモン:x:1:1:デーモン:/usr/sbin:/bin/sh
 bin:x:2:2:bin:/bin:/bin/sh
…(以下は無視してください)…

一致する文字列を削除する場合は、次のコマンドを使用します。

[b3335@MIC ~]$ nl /etc/passwd | sed 's/root//g'

(3)データの検索と置換 sedは行全体の処理モードに加えて、行単位で部分的なデータの検索と置換を行うこともできます。基本的に、sed の検索と置換は vi と非常に似ています。彼はこんな感じです:

sed 's/置換された文字列/新しい文字列/g'

(4) データを検索してコマンドを実行する /etc/passwdを検索し、rootに対応する行を見つけて、中括弧内のコマンドセットを実行します。各コマンドはセミコロンで区切られています。ここでbashをblueshellに置き換えて、次の行を出力します。

/etc/passwd | sed -n '/root/{s/bash/blueshell/;p}' を実行します。
 ルート:x:0:0:root:/root:/bin/blueshell

/etc/passwdの最初のbashキーワードのみがblueshellに置き換えられた場合は終了する

/etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}' を実行します。 
ルート:x:0:0:root:/root:/bin/blueshell

4.6 sedコマンドを編集して、/etc/passwdの3行目から末尾までのデータを削除し、bashをblueshellに置き換えます。

/etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' を実行します
 ルート:x:0:0:root:/root:/bin/blueshell
 デーモン:x:1:1:デーモン:/usr/sbin:/bin/sh

-e はマルチポイント編集を意味します。最初の編集コマンドは、/etc/passwd の 3 行目から末尾までのデータを削除します。2 番目のコマンドは bash を検索し、blueshell に置き換えます。

4.7 ファイルを直接変更する

sed は、パイプ コマンドやデータ ストリームのリダイレクトを使用せずに、ファイルの内容を直接変更できます。 ただし、この操作は元のファイルを直接変更するため、システム構成をテスト用に安易に使用せず、使用時には注意してください。ダウンロードしたregular_express.txtファイルを使ってテストしてみましょう。

sed を使用して、regular_express.txt 内の . で終わるすべての行を ! に置き換えます。

[root@www ~]# sed -i 's/\.$/!/g' レギュラー_express.txt

sed を使用して、regular_express.txt の最後の行に「# This is a test」を直接追加します。

[root@www ~]# sed -i '$a # これはテストです'regular_express.txt

$ は最後の行を表し、a のアクションは追加であるため、ファイルの末尾に「# これはテストです」が追加されます。

sed の-iオプションを使用すると、ファイルの内容を直接変更できるので、非常に便利です。たとえば、100 万行のファイルがあり、100 行目にテキストを追加したい場合、vim を使用すると面倒なことになるかもしれません。ファイルが大きすぎるからです。ではどうすればいいでしょうか? sed を使うだけです! sed には直接変更/置換する機能があるため、修正を行うために vim を使用する必要さえありません。

上記は Linux sed コマンドの使用に関する詳細な内容です。Linux sed コマンドの詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。

以下もご興味があるかもしれません:
  • Linux で xargs コマンドを使用する詳細なチュートリアル
  • Linux trコマンドの使用
  • Linux ipcsコマンドの使用
  • Linux sar コマンドの使用方法とコード例の分析
  • Linux lsコマンドの使用
  • Linuxの読み取りコマンドの使用
  • Linux usermod コマンドの使用
  • Linuxのpasswdコマンドの使用
  • Linuxのtimeコマンドの使い方の詳しい説明
  • Linux lnコマンドの使用
  • Linux telnetコマンドの使用

<<:  要素動的ルーティングブレッドクラムの実装例

>>:  Mysql | ワイルドカード(%、_ など)を使用したファジークエリの詳細な説明

推薦する

燃える炎効果の英語フォント16種類をシェアする

私たちは視覚の世界に住んでおり、多くの視覚効果に囲まれています。コンピューターの前にいても、屋外にい...

Vueは動的コンポーネントを使用してTAB切り替え効果を実現します

目次問題の説明Vueの動的コンポーネントとはアプリケーションシナリオの説明実装手順ステップ 1 (新...

Ubuntu 20.04 と NVIDIA ドライバーのインストールに関するチュートリアル

Ubuntu 20.04をインストールする NVIDIAドライバーをインストールする Pytouch...

Linux の Docker コンテナで bash を終了する 2 つの方法

bash を終了する場合は、次の 2 つのオプションがあります。最初のもの: Ctrl + d を押...

JS の Promise に中止関数を追加する方法

目次概要プロミスレースメソッド約束の再パッケージ化中止コントローラAxiosプラグインにはキャンセル...

Tomcatのサーバーオプションの詳細な説明

1. 構成デフォルトでは、最初の 2 つはチェックされていないので、チェックする必要があります。 (...

SQL文の最適化の一般的な手順の詳細な説明

序文この記事では主に、SQL ステートメントの最適化の一般的な手順について説明します。これは、参考と...

W3C チュートリアル (11): W3C DOM アクティビティ

ドキュメント オブジェクト モデル (DOM) は、プログラムがドキュメントのコンテンツ、構造、およ...

CSSは背景画像の画面適応を実現する

ログインページなどのホームページを作成する場合、大きな背景画像を配置する必要があり、さまざまな画面の...

Zabbix と bat スクリプトを組み合わせて複数のアプリケーションの状態を監視する方法

シナリオシミュレーション:国内企業の中には、重要な業務をサポートするために特定のウィンドウ プログラ...

Linux システムのユーザー管理コマンドの概要

ユーザーとグループの管理1. ユーザーとグループの基本概念ユーザーとグループ:システム上のすべてのプ...

Vue の計算プロパティ

目次1. 基本的な例2. 計算プロパティキャッシュとメソッド3. 計算プロパティセッター序文:通常、...

IE8 開発者ツール メニューの説明

<br />この記事では、開発者ツールのさまざまなメニューについて簡単に説明しました。こ...

VMware Workstation 14 Pro は CentOS 7.0 をインストールします

VMware Workstation 14 ProにCentOS 7.0をインストールする具体的な方...

MySQL データベースは XA 仕様をどのように実装しますか?

MySQL 一貫性ログMySQL データベースの電源が切れた場合、コミットされていないトランザクシ...