Linuxのsedコマンド
Linuxのsedのコマンドは、テキストファイルを処理するスクリプトを使用することです。
sedスクリプトは、処理するための命令、エディットテキストファイルに従うことができます。
書かれた変換手順を、文書の繰り返し操作を簡素化する。sedのは、主に、自動的に1つまたは複数のファイルを編集するために使用されます。
文法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
パラメータ説明:
- 入力テキストファイルを処理するためのオプションでスクリプトに指定-eの<script>または--expression = <スクリプト>。
- 入力テキストファイルを処理するスクリプトファイルを指定する-f <スクリプトファイル>または--file = <スクリプトファイル>オプション。
- -hまたは--helpと、ヘルプが表示されます。
- -n --quietまたは--silentまたはスクリプトが唯一の治療後の結果を示しています。
- -Vまたは--versionバージョン情報を表示します。
アクション説明:
- A:新しい、新しい行に(現在は次の行を)文字列を取り戻すことができ、それらの文字列が表示されます -
- C:交換し、リアcがその文字列これらの文字列は、間にN1、N2ラインを置き換えることができますすることができます!
- D:それはああですので、そのように、通常はそれ以降のDポンドを受け入れていない、削除、削除します。
- 私は:挿入、私は文字列を取り戻すことができ、それらの文字列は、新しい行に(1行上に存在)となります。
- P:印刷、それは、印刷データの選択になります。 Pは通常〜-n sedのパラメータを指定して実行されます
- S:置換が仕事に直接マイルを置換することができます! 通常、このアクションは正規表現を使用することができますよ! たとえば/古い/新しい/グラムを1,20sそれがあります!
例
ファイルテストファイル4行目の行を追加し、結果を標準出力に出力するためにした後、コマンドプロンプトで次のコマンドを入力します。
sed -e 4a\newLine testfile
次のように最初のチェックテストファイルの内容は以下のとおりです。
$ cat testfile #查看testfile 中的内容 HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! Linux test
次のようにsedコマンドを使用した後、出力結果は次のとおりです。
$ sed -e 4a\newline testfile #使用sed 在第四行后添加新字符串 HELLO LINUX! #testfile文件原有的内容 Linux is a free unix-type opterating system. This is a linux testfile! Linux test newline
動作ユニットを追加する/削除します
/ etc / passwdファイルリストや印刷行番号の内容は、しばらく先に削除2-5行を設定しました!
[root@www ~]# nl /etc/passwd | sed '2,5d' 1 root:x:0:0:root:/root:/bin/bash 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown .....(后面省略).....
「2,5d 'とsedのアクション、それがdを削除することです! ライン2-5は彼を削除するので、そのように何もデータがLo〜。また、メモを取る2-5行目に表示されていない、SED -e魚をリリースすることになっている、何-eはそれを行いません! また、バックsedのテイクアクションは、周りの ''ああ2の単一引用符をすることを確認していることに注意してください!
ちょうど2番目の行を削除
nl /etc/passwd | sed '2d'
最後の行に三分の一を削除するには
nl /etc/passwd | sed '3,$d'
2行目(つまり、3行目に追加された)を加えた「ドリンクお茶?」の言葉の後に!
[root@www ~]# nl /etc/passwd | sed '2a drink tea' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin drink tea 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin .....(后面省略).....
それは2行目の前にあるのであれば
nl /etc/passwd | sed '2i drink tea'
あなたは、このような「お茶を飲むか.....」と「ビールを飲む?」のような2つの行を、参加する2行目の後ろの2列以上増加する場合
[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\ > drink beer ?' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin Drink tea or ...... drink beer ? 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin .....(后面省略).....
ああの各列の間に新しい行を追加するには、バックスラッシュ "\"でなければなりません! ですから、上記の例では、我々は最終面の最初の行を見つけることができ、そこに存在\。
ディスプレイのユニットを交換します
「いいえ2-5番号」を意味するために2-5行置換の内容?
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number' 1 root:x:0:0:root:/root:/bin/bash No 2-5 number 6 sync:x:5:0:sync:/sbin:/bin/sync .....(后面省略).....
この方法を通して、私たちは、データの行全体を交換することができます!
最初の行は内でのみ5-7 / etc / passwdファイルを一覧表示します
[root@www ~]# nl /etc/passwd | sed -n '5,7p' 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown </p><p> 可以透过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。 </p> <h3>数据的搜寻并显示</h3> <p>搜索 /etc/passwd有root关键字的行</p> <pre> nl /etc/passwd | sed '/root/p' 1 root:x:0:0:root:/root:/bin/bash 1 root:x:0:0:root:/root:/bin/bash 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh 3 bin:x:2:2:bin:/bin:/bin/sh 4 sys:x:3:3:sys:/dev:/bin/sh 5 sync:x:4:65534:sync:/bin:/bin/sync ....下面忽略
ルートが見つかった場合、すべての出力ラインに加えて、出力線に一致します。
使用する場合は-nは、テンプレートのすべての行を印刷します。
nl /etc/passwd | sed -n '/root/p' 1 root:x:0:0:root:/root:/bin/bash
検索とデータを削除
削除された/ etc / passwdの行は、他のすべてのライン出力のルートが含まれています
nl /etc/passwd | sed '/root/d' 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh 3 bin:x:2:2:bin:/bin:/bin/sh ....下面忽略 #第一行的匹配root已经删除了
検索データやコマンドを実行
それは、再輸出、blueshellを交換ここではbashに、各コマンドの間にセミコロンで区切られた、一連のコマンドには中カッコの実装の後ろに、対応する行のルートを見つけ、マッチングパターン東部ライン、検索/ etc / passwdファイルを探しますライン:
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}' 1 root:x:0:0:root:/root:/bin/blueshell
Qは最後の出口です。
検索とデータを交換します
ライン全体の処理モードに加えて、検索の単位でデータの一部を使用して置き換えることができセッド。 sedの検索や置き換えに非常に実質的に類似のVi! 彼は、このようなビットです。
sed 's/要被取代的字串/新的字串/g'
元の情報の最初の観測は、/ sbin / ifconfigコマンドクエリIPを使用
[root@www ~]# /sbin/ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 .....(以下省略).....
IPこのマシンは192.168.1.100です。
IPの前部を削除します
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
次に、それはすなわち、フォローアップの一部を削除することです:192.168.1.100 BCAST:192.168.1.255マスク:255.255.255.0
IPの一部は後に削除します
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' 192.168.1.100
マルチ編集
sedコマンドは、データの最後に/ etc / passwdの三行目を削除して、bashはblueshell置き換えます
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' 1 root:x:0:0:root:/root:/bin/blueshell 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
-eは、マルチポイントの編集を表し、最初の編集コマンドは、第三行の末尾のデータへのpasswdファイル/の/ etcを削除し、第2のコマンド検索のbashはblueshellを取り替えました。
直接ファイルの内容を変更(危険な動き)
SEDは、直接コマンドやデータストリームがリダイレクトパイプを使用しない、ファイルの内容を変更することができます! しかし、このアクションが直接、元のファイルを変更することになりますので、あなただけのテストするためのシステム構成を取ることはありません! 我々はまだそれを見regular_express.txtテストするためにダウンロードしたファイルを使用します!
それはregular_express.txt内であれば、ラインの両端にsedを使用してください。置き換えられます!
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
「これはテストです#。」regular_express.txtに直接最後の行にsedを使用します
[root@www ~]# sed -i '$a # This is a test' regular_express.txt
$が最後の行を表し、そして新しいアクションがあるので、最終的な文書は追加するので "#これはテストです!」
直接非常に便利ですファイルの内容を変更するには「-i」オプションをsedの! あなたは、いくつかのテキスト行100を追加したいファイルの万行を持っている場合たとえば、Vimを使用して、この時間は気違いかもしれません! ファイルが大きすぎるので! それをどのように行うには? 利用ああ上のsed! 直接関数を置き換える/変更sedを通じ、あなたも修正するのvimを使用しないでください!