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 の 上記は Linux sed コマンドの使用に関する詳細な内容です。Linux sed コマンドの詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。 以下もご興味があるかもしれません:
|
>>: Mysql | ワイルドカード(%、_ など)を使用したファジークエリの詳細な説明
データ ボリューム コンテナーは、データ ボリュームをマウントするために特別に使用されるコンテナーで...
Linux での Hadoop インストール チュートリアルはインターネットや書籍に多数ありますが、...
目次1. nginxのインストールと操作(Mac OS環境) 2. nginxルールの設定3. コマ...
このソリューションの利点はシンプルさと使いやすさですが、欠点はダウンタイムが長くなることです。 した...
エラー: Connection to blog0@localhost failed. [08001]...
目次1. ダウンロード2. 展開3. Nginxログ関連の設定4. ファイルダウンローダーとして n...
SVG は、さまざまな利点があるため、近年広く使用されています。残念ながら、WeChat ミニプログ...
1. mysqlエクスポートファイル: SELECT `pe2e_user_to_company`....
長い間ウェブサイトを作ってきましたが、入力時のnameとidの違いがまだわかりません。最近jQuer...
(1)実験環境youxi1 192.168.5.101 ロードバランサーyouxi2 192.168...
1. データベースのタイムゾーンを確認する '%time_zone' のような変数を...
ネットサーフィンをしていると、私の注意を引こうとする美しいグラフィックでいっぱいの Web サイトを...
最近、コンピューターの電源を入れたところ、Geek Academy が新規ユーザーに 1 か月の無料...
この記事では、例を使用して MySQL プロセス関数の一般的な使用方法を説明します。ご参考までに、詳...
Tomcat テストで 404 問題が発生します。問題は次のとおりです。 HTTP ステータス 40...