その他
    ホーム 技術発信 DoRuby sedコマンドでテキストの加工
    sedコマンドでテキストの加工
     

    sedコマンドでテキストの加工

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    ソースコード内の文字列置換(空白スペースの削除)を行う際に、一つ一つvimで開いてやっていたのですが、煩わしくなったので何かいい方法が無いかと調べたところ、sedコマンドが便利でした。
    (sedは「stream editor」の略だそうです)

    sedコマンドの使い方

    直接ファイル名を指定したり、標準出力をパイプで渡すことでテキストの加工を行えます。

    # 基本的な使い方
    sed [オプション] (ファイル名)
    
    # 以下、使い方の一例
    # ファイル名を直接指定して文字列を置換する場合
    sed -e 's/hogehoge/bizzbuzz/g' test.text  
    
    # パイプで渡して置換する場合
    cat test.text | sed -e 's/hogehoge/bizzbuzz/g'
    

    sedコマンドで出来ること

    sedコマンドで出来る処理はかなり多いです。
    今回は、自分が利用した物について紹介したいと思います。

    文字列の置換-sコマンド-

    sコマンドを使うと文字列の置換を行うことが出来ます。

    sコマンドは、vimと同じような形で記述出来るので、非常に楽です。

    またアドレスを利用すると、指定した行のみ置換をするといったことが出来るようになります。

    アドレスや置換する文字列には、正規表現を使用出来るので、柔軟な対応を行うことが出来ます。

    # sコマンドの使い方
    sed '(アドレス) s/(置換前の文字列)/(置換後の文字列)/'
    
    
    # 使い方の一例
    # sample.txt
    foo: bar
    hoge: huga
    bizz: bar
    
    $ sed 's/bar/buzz/' sample.txt
    foo: buzz
    hoge: huga
    bizz: buzz
    
    # bizzの行だけ置換
    $ sed '/bizz/' 's/bar/buzz/' sample.txt
    foo: bar
    hoge: huga
    bizz: buzz
    

    行の削除 -dコマンド-

    dコマンドでは、アドレスや行番号を指定して行を削除することが出来ます。

    #アドレスを指定して行削除
    $ sed '/bizz/ d' sample.txt
    foo: bar
    hoge: huga
    
    # 行番号を指定して削除
    $ sed '3 d' sample.txt
    foo: bar
    hoge: huga
    

    おわりに

    sedコマンドでは、今回紹介した2つ以外にも多くのコマンドが実装されているようです。

    sedや、その他のコマンドについてもよく理解して、上手く扱えるように精進していきたいと思います。