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 | ワイルドカード(%、_ など)を使用したファジークエリの詳細な説明

推薦する

Vue3 における非親子コンポーネントの値転送の詳細な説明

目次アプリ.vueサブ1.vueサブ2.vue要約する vue2 における非親子コンポーネントの値の...

vsftpd ユーザーが ssh 経由でログインすることを禁止する方法

序文vsftp は使いやすく安全な FTP サーバー ソフトウェアです。システムユーザーまたは仮想ユ...

Vue が Ref を使用してレベル間でコンポーネントを取得する手順

VueはRefを使用してレベル間でコンポーネントインスタンスを取得します例の紹介開発プロセスでは、レ...

Dockerプライベートライブラリの実装

プライベート Docker レジストリのインストールとデプロイは、Docker テクノロジーを導入、...

nacos が mysql に接続できない場合の解決策

理由nacos の pom が依存する mysql バージョンが、mysql バージョンと一致してい...

vue+tsは要素のマウスドラッグの効果を実現します

この記事の例では、要素のマウスドラッグ効果を実現するためのvue+tsの具体的なコードを参考までに共...

MyISAMとInnoDBの違いについてお話しましょう

主な違いは次のとおりです。 1. MySQL はデフォルトで MyISAM を使用します。 2. M...

Sublime TextがUbuntuで中国語を入力できない問題の最も簡単な解決策

崇高なSublime Text はコード エディター (Sublime Text2 は有料ソフトウェ...

Windows システムに mysql5.7.21 をインストールするための詳細なチュートリアル

MySQL インストーラーは、MySQL ソフトウェアのあらゆるニーズに対応する、使いやすいウィザー...

Docker で LNMP 環境を素早く構築する方法 (最新)

序文ヒント: ここで、この記事に記録するおおよその内容を追加できます。例えば、人工知能の継続的な発展...

MySQLは挿入を使用して複数のレコードを挿入し、データを一括で追加します。

table1 に 5 つのレコードを挿入する場合、次のコードは誤りです。 テーブル1に(id,na...

画像の色を変更するための純粋なCSS

画像の色を変更するための CSS テクニックは非常にシンプルです。具体的なコードは次のとおりです。ヒ...

CSS リスト モデルでのマーカー タグの使用

この記事では主に、 list-itemの下にある::master疑似要素、 list-style-i...

Linux で MySQL をインストールする簡単な方法

Linux に MySQL をインストールする方法をオンラインで検索すると、多くの方法が表示されまし...