シェル プログラミングの三剣士の 1 人として、sed の重要性は自明のことです。 sed は 1 行ずつ処理し、処理後に次の行を処理するストリーム プログラマで、正規表現をサポートしており、非常に強力です。ただし、sed は通常のコマンドに比べて複雑でオプションも多いため、使いこなすにはある程度の労力が必要です。多くの例を通して、この強力な sed コマンドの役割を見てみましょう。
構文形式: sed [オプション] [アクション]
一般的に使用されるオプションは次のとおりです:
-n:デフォルトでは sed が使用され、標準入力の内容をすべて出力しますが、このオプションを使用すると、sed によって処理された行のみが表示されます。
-e: 複数のアクションを同じ行で実行できるようにします
-f: ファイルからアクションを読み取ります
-i: 画面に入力するのではなく、ファイルを直接変更します (危険)
アクションにはパラメーターが多すぎます。以下にリストします。
a: 一致する行の下に行を追加します
c: 一致する行を新しい内容で変更します
d: 一致する行を削除
i: 一致する行の前にコンテンツを追加
p: 印刷
s: 一致する行の内容を置き換えます
#例 1: /etc/passwd ファイルの 5 ~ 10 行目を出力します
# sed -n '5,10p' /etc/passwd lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
例 2: /etc/passwd ファイルの 2 行目、2 行目から 10 行目までを削除
# cat -n /etc/passwd | sed '2d' | sed '5,10d'上記に加えてメソッドの場合、-e オプションを使用して完了することもできます。
# cat -n /etc/passwd | sed -e '2d' -e '5,10d'
例 3: サーバーの IP アドレスを取得する
このケースは非常に優れています。 、みんなにお勧めします 詳しく見てください# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.26.9.143 netmask 255.255.240.0 broadcast 172.26.15.255 ether 00:16:3e:0a:01:ad txqueuelen 1000 (Ethernet) ……必要なのは 172.26.9.143 です。 最初のステップは、処理したい行を取得することです
# ifconfig eth0 | sed -n '/.*inet/p' inet 172.26.9.143 netmask 255.255.240.0 broadcast 172.26.15.2552 番目のステップは、不要な情報を空白文字に置き換えることです
# ifconfig eth0 | sed -n '/.*inet/p' | sed 's/.*inet\s\+//g' 172.26.9.143 netmask 255.255.240.0 broadcast 172.26.15.255次に、IP アドレスを入力します後続の置換ビットはすべて空のままにしておきます
# ifconfig eth0 | sed -n '/.*inet/p' | sed 's/.*inet\s\+//g' | sed 's/\s\+.*//g' 172.26.9.143上の例について説明します まず、最初のステップでは、-n と p を使用して必要な行を取得します。正規表現の \s は少なくとも 1 つのスペースと一致することを意味しますが、ここではプラス記号の前にエスケープ文字 \ を使用する必要があることに注意してください。
例 4
最後の例として、昨日私が実際に経験したケースを挙げます。要件は次のようになります。URL アドレスをテキストで取得しますが、前の http:// は必要ありません。テキスト コンテンツの一部は次のとおりです:<td width=820> <a href=http://beijing.hellozx.com onclick="co('beijing')"><font color="red">北京</font></a> <a href=http://shanghai.hellozx.com onclick="co('shanghai')"><font color="red">上海</font></a> <a href=http://tianjin.hellozx.com onclick="co('tianjin')"><font color="red">天津</font></a> <a href=http://chongqing.hellozx.com onclick="co('chongqing')"><font color="red">重庆</font></a></td></tr> <tr><td width=80 height=30 align=right> <b><font style="font-size:14px;">山东</font>:</b> </td><td width=820> <a href="http://jinan.hellozx.com" onclick="co('jinan')"><font color=red style="font-size:14px;">济南</font></a> <a href="http://qingdao.hellozx.com" onclick="co('qingdao')"><font color=red style="font-size:14px;">青岛</font></a>この要件をいくつかの手順で完了しましょう。まず、URL アドレスを含まないすべての行をフィルターします。
# sed -n '/http:/p' a.txt次に、不要な情報をすべて空白文字に置き換えます。十分です。まず http:// とその前のすべての文字を削除します
sed -n '/http:/p' a.txt | sed 's/.*http:\/\///g'、次にすべての二重引用符とその後のすべての文字を削除します
# sed -n '/http:/p' a.txt | sed 's/.*http:\/\///g' | sed 's/".*//g'これで、画面出力は次のようになります
海口.hellozx.com sanya.hellozx.com kunming.hellozx.com dali.hellozx.com xining.hellozx.com yinchuan.hellozx.com wulumuqi.hellozx.com ……
以上がシェルプログラミングの三剣士のうちの1人のsedコマンドを1つの記事で理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。