Linux-admin-sed-command

提供:Dev Guides
移動先:案内検索

Linux Admin-sedコマンド

*sed* はマスターするための複雑なユーティリティです。 このコマンドは、テキストをフィルタリングおよび変換するためにエディターをストリーミングします。 書籍全体が、sedを上手に使用することに専念して書かれています。 したがって、このチュートリアルの目的は、_sed_の3つの基本的な使用法を紹介することです。
  • 文字置換
  • 印刷操作
  • 削除操作

_sed_の一般的なコマンド構文は-

sed [options] [file to operate on]

覚えておくべき一般的な_sed_スイッチを次に示します。

Switch Action
-i Edit files in place instead of stream, -i[SUFFIX] to create backup file
-e Add the script commands to be executed
-n Quiet, suppress automatic printing
-r ReGex, use extended regular expressions in the script
*-i* は、_sed_に渡されるファイルのストリームを編集する代わりに、ファイルに変更を適用します。

_sed_は、*-e *オプションとともに使用すると、コマンドを拡張してストリーム上の複数の操作を処理します。 代わりにsedを再帰的にパイピングします。

echo "Windows and IIS run the Internet" | sed -e 's/Windows/Linux/' -e 's/and
IIS//'  -e 's/run/runs/'
Linux runs the Internet

sed_を指定した '- n_ オプションは、stdoutへのデフォルトの印刷を抑制します。 ご覧のとおり、sedのprintコマンドを使用すると、各行が標準出力に複製されます。

bash-3.2# sed 'p' ./lines.txt
line1
line1
line2
line2

今回は、sed_で-n_オプションを使用します-

bash-3.2# sed -n 'p' ./lines.txt
line1
line2

sed_は、コンテンツストリームをstdoutに送信します。 「_p」または印刷コマンドが追加されると、各行に個別のストリームが送信され、すべての行が標準出力に複製されます。

sed置換コマンド

このコマンドは、「 _ s_ 」オプションで指定されます。 すでにsed_がその置換コマンドで使用されているのを見てきました。 以下は簡単な例です-

[root@centosLocal Documents]# echo "developers eat veggies and fruit" | sed -e
's/veggies/pizza/' -e 's/fruit/coffee/'
developers eat pizza and coffee
[root@centosLocal Documents]#

dev.txtという名前のファイルでこれを試してみましょう-

[root@centosLocal centos]# cat dev.txt
Developers code all night and sleep all day.
[root@centosLocal centos]#

さて、_sed_に送信される出力ストリームだけでなく、ファイルの内容を変更しましょう-

[root@centosLocal centos]# sed -ibak 's/sleep/code/' ./dev.txt
[root@centosLocal centos]# ls dev*
dev.txt  dev.txtbak
[root@centosLocal centos]# cat dev*
Developers code all night and code all day.
Developers code all night and sleep all day.
[root@centosLocal centos]#

-バックアップファイルを作成するために、一意のサフィックスを持つ - i オプションを使用しました。

sed printコマンド

このコマンドは「p」コマンドで指定されます。

names.txtファイルを使用してみましょう。出力は簡潔にするために編集されています-

[root@centosLocal Documents]# sed -n "p" ./names.txt
Ted:Daniel:101
Jenny:Colon:608
Dana:Maxwell:602
Marian:Little:903
Bobbie:Chapman:403
Nicolas:Singleton:203
Dale:Barton:901
Aaron:Dennis:305

_sed_は、「アドレス」の使用を許可し、stdoutに出力される内容をより詳細に定義します-

[root@centosLocal Documents]# sed -n "1,10p" ./names.txt
Ted:Daniel:101
Jenny:Colon:608
Dana:Maxwell:602
Marian:Little:903
Bobbie:Chapman:403
Nicolas:Singleton:203
Dale:Barton:901
Aaron:Dennis:305
Santos:Andrews:504
Jacqueline:Neal:102
[root@centosLocal Documents]#

_head_と同様に、names.txtファイルの最初の10行を印刷しました。

9階にオフィスがあるものだけを印刷したい場合はどうしますか?

[root@centosLocal Documents]# sed -n "/90/p" ./names.txt
Marian:Little:903
Dale:Barton:901
Kellie:Curtis:903:
Gina:Carr:902
Antonia:Lucas:901
[root@centosLocal Documents]#

とても簡単。 9階にオフィスがある人を除き、全員を印刷することもできます-

[root@centosLocal Documents]# sed -n '/90/!p' ./names.txt
Ted:Daniel:101
Jenny:Colon:608
Dana:Maxwell:602
Bobbie:Chapman:403
Nicolas:Singleton:203
Aaron:Dennis:305
Santos:Andrews:504
Jacqueline:Neal:102
Billy:Crawford:301
Rosa:Summers:405
Matt:Davis:305
Francisco:Gilbert:101
Sidney:Mac:100
Heidi:Simmons:204
Matt:Davis:205
Cristina:Torres:206
Sonya:Weaver:403
Donald:Evans:403

上記のコードでは、/と/with の間の ' p '印刷操作を無効にしました。 これは、「d」または_delete_コマンドと同様に実行されます。 ただし、_sed_の否定によって結果が異なる場合があります。 したがって、一般的なルールとして:_p_は、不要なものを印刷して無効にします。

sed deleteコマンド

前述のように、deleteコマンドはsed printコマンドの反対です。 _name.txt_ファイルから始めましょう-

[root@centosLocal Documents]# sed 'd' ./names.txt
[root@centosLocal Documents]#

何も印刷されません。 上記のコマンドを使用して、ストリームの標準出力からすべての行を削除するように_sed_に依頼しました。 さて、最初の2行だけを印刷し、残りのストリームを「削除」しましょう-

[root@centosLocal Documents]# sed '1,2 !d' ./names.txt
Ted:Daniel:101
Jenny:Colon:608
[root@centosLocal Documents]#

See? 「p」または印刷コマンドに似ています。 さて、deleteコマンドで何か便利なことをしましょう。 ファイル内のすべての空白行を削除したい-

[root@centosLocal Documents]# cat lines.txt
line1
line2
line3
line4
line5
[root@centosLocal Documents]#

電子メールをコピーして貼り付けたり、非標準の改行でフォーマットしたりして、ごちゃ混ぜのテキストを含むこのようなファイルを受信することは珍しくありません。 vimでファイルをインタラクティブに編集する代わりに、_sed_を使用して作業を行うことができます。

[root@centosLocal Documents]# sed -i '/^\s*$/d' ./lines.txt
[root@centosLocal Documents]# cat ./lines.txt
line1
line2
line3
line4
line5
[root@centosLocal Documents]#

これで、ファイルは読みやすい形式にフォーマットされました。

注意-重要なファイルを変更する場合は、* _- i _ *スイッチを使用します。 ファイルのバックアップサフィックスを追加することは、ファイルの内容を予約することを強くお勧めします(_sed_は、わずかな入力ミスで極端な変更を加えることができます)。