トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

sedの使い方 のバックアップ(No.6)


sedの使い方

sedは文字列置換をしてくれるコマンドです。

使い方は至って簡単。正規表現を使わなければ笑

sed 's/置換対象文字列/置換後文字列/'

sed は各行に対して、最初に見付かった文字列しか変換を行わない。

対象全部を置換したい場合は、最後に「g」をつけます。

sed 's/置換対象文字列/置換後文字列/g'

実行例は以下の通り

# date "+%H:%M:%S"
17:45:20
# 
# date "+%H:%M:%S" | sed 's/:/./'   ①
17.45:20
#
# date "+%H:%M:%S" | sed 's/:/./g' ②
17.45.20
#
# date "+%H:%M:%S" | sed 's/://g'  ③
174520 
#

実行例の説明

  • ①:gをつけない場合、パターンにマッチした最初の文字列「:」のみを「.」に置換
  • ②:gをつけた場合、パターンにマッチしたすべての文字列「:」を「.」に置換
  • ③:置換後文字列を指定しなかった場合、パターンにマッチした文字列「:」を削除

へー、簡単。

リンク

このサイトをみて使ってみました。

サンプル

本のタイトルの第~巻を除去する正規化処理

[root@localhost tmp]# cat test.txt 
坂の上の雲第1巻
坂の上の雲第12巻

[root@localhost tmp]# cat test.txt | | sed s/第[0-9]巻//g 
坂の上の雲
坂の上の雲第12巻

[root@localhost tmp]# cat test.txt | sed s/第[0-9]*巻//g 
坂の上の雲
坂の上の雲

サンプル2 改行を含むXMLの値を取り出す

こんなファイルがあります。

    <resumptionToken completeListSize="10505" cursor="">
        2010-12-08/2010-12-15/zassaku/dcndl_porta/R000000004-I000897285
    </resumptionToken>

これを、こんな感じでsedすると

sed -e '/cursor=\"\">/N;s/\n//' test.xml | grep cursor | sed -e 's/.*cursor=\"\">//;s/\s//g'

こんな感じになります。

2010-12-08/2010-12-15/zassaku/dcndl_porta/R000000004-I000897285

サンプル3 XMLで対象のタグの値を抽出する

XMLから、最初に出現する<repository_no>タグの値を出力する。

head -1 x* | sed -n -e 's/.*<repository_no>\(.*\)<\/repository_no>.*/\1/p'

サンプル4 指定した行数を削除する

指定した行数を削除します。

例えば、test.txtの1行目から14行目までを削除します。

sed '1,14d' test.txt