linux三剣客のsed


linux三剣客のsed
  sedコマンドは強力なストリームエディタであり、テキスト処理において非常に重要なツールであり、正規表現と完璧に組み合わせて使用することができ、機能が異なります.処理時には、現在処理されているテキストの行を一時バッファに格納して「モードスペース」(pattern space)と呼び、sedコマンドでバッファ内の内容を処理し、処理が完了したらバッファの内容を画面に送ります.次に、ファイルの最後まで次の行を処理します.リダイレクトストレージ出力を使用したり、特定のオプションを使用したりしない限り、処理前後のファイル内容は変更されません.
1、フォーマットの使用
    sed [option] 'AdressCommand' FILE...
2、パラメータ
[option]
    -e SCRIPT-e SCRIPT...:複数のスクリプトを同時に実行できます
    -f FILENAME:指定されたコマンドをファイルFILENAMEに保存し、FILENAMEファイルから内容を読み出して順番にコマンドを実行する
    -i:ソースファイルの内容を修正し、慎重に!!!
    -n:サイレントモード、モード空間の内容を表示しない
    -r:拡張正規表現の使用
Adress
    StartLine,EndLine:たとえば1100
    /RegExp/:/内部では/^root/などの正規表現を使用
    /patter 1/,/patter 2/:初めてモード1でマッチングされた行が開始し、モード2でマッチングされた行が終了する
    LineNumber:指定した行
        .:現在の行
        $:最後の行
    StartLine+n:指定された行から後へn行
Command
    aSTRING:指定された行の後ろに1行追加し、内容はSTRING、複数行追加に「」
    d:該当する行を削除する
    iSTRING:指定された行の前に1行追加し、内容はSTRING
    p:条件を満たす行を表示する
    r FILENAME:指定ファイルFILENAMEの内容をfileファイル指定行に追加する
    w FILENAME:指定ファイルfile指定行内容をFILENAMEファイルに書き込み保存する
3、特殊用法(比較的重要)
    sed's/PATER/STRING/修飾子'FILE:検索および置換(デフォルトでは、各行で最初にパターンマッチングされた文字列のみが置換されます).ここで、"/"は他の特殊文字で置換できますが、3つは同じでなければなりません.如:'s####'、's@@'.
PATTER:検索したい内容は、正規表現をサポートし、-rオプションを追加すればよい
STRING:STRINGに置き換え、後方参照をサポート
    参照一致する列:
        PATTER部分で引用したい列を「()」で囲みます
1、2...:参照が一致する列は、それぞれ参照が1番目()、2番目()...
    たとえば、l..e形式の文字にr:like-->liker、love-->loverを付けて、次のようにします.
        sed -r 's#(l..e)#\1r#' FILE
修飾子:
    g:グローバル置換を表す
    i:大文字小文字を無視
4、実用例
#            ,             

[root@acer ~]# cat person.txt 
1,zhangsan,teacher
2,lisi,CEO
3,wangwu,student
4,zhaoliu,CEO
5,huangquan,student

1)追加行:4行目以降に行を追加
[root@acer ~]# sed '4a \This line is newly added' person.txt
1,zhangsan,teacher
2,lisi,CEO
3,wangwu,student
4,zhaoliu,CEO
This line is newly added
5,huangquan,student

2)指定された行の削除:3行目から最後の行まで削除
[root@acer ~]# sed '3,$d' person.txt
1,zhangsan,teacher
2,lisi,CEO

3)指定内容を含む行を印刷しない:CEOを含まない行を印刷する
[root@acer ~]# sed '/CEO/d' person.txt 
1,zhangsan,teacher
3,wangwu,student
5,huangquan,student

4)指定内容を含む行の印刷:CEOを含む行の印刷
#          CEO      
[root@acer ~]# sed '/CEO/p' person.txt  
1,zhangsan,teacher
2,lisi,CEO
2,lisi,CEO
3,wangwu,student
4,zhaoliu,CEO
4,zhaoliu,CEO
5,huangquan,student

#     -n  ,           
[root@acer ~]# sed  -n '/CEO/p' person.txt 
2,lisi,CEO
4,zhaoliu,CEO

5)指定されたコンテンツの検索と置換出力:CEOをCTOに置換
[root@acer ~]# sed 's#CEO#CTO#g' person.txt 
1,zhangsan,teacher
2,lisi,CTO
3,wangwu,student
4,zhaoliu,CTO
5,huangquan,student

 要するに、sedコマンドは非常に強力なテキスト検索編集コマンドであり、正規表現、パイプ、リダイレクトと連用し、強力な機能を実現することができます.