×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

[トップページ] [星雲紀行] [MLXS] [WPGen] [自作音楽] [モデル] [vi/vim] [tips] [自己紹介]

sed

目次

  1. 基本
  2. tips
  3. 参考文献・参考ウェブページ

このページは

sed についてのTIPS。
sed とは、検索置換をコマンドライン上から行う。
基本的な文法は以下。vi の変換に似ているか。
BEFORE : 置換前
AFTER : 置換後
TARGET : 置換対象ファイル名

$ sed "s/BEFORE/AFTER/" TARGET
ファイルへの書き出しなどは、リダイレクト > を使用する。
変換式の引数($2) は""でくくること。
これがないと、正しく変換できない。
[目次]

tips

  1. 一行をまとめて変数\1 として扱う。

    正規表現.*の周りを¥(と¥)で囲む。つまり、\(.*\) とする。
    これは、1行に入っている文字が何であろうとそれを全部指し、かつ、
    次回以降それらをまとめて変数\1として表現する。

    $ sed "s/\(.*\)/cp \1 \/work\/\1/" list
    これはたとえばファイル名を
    $ ls . > tmp
    として一時的に保存したあとに
    $ sed "s/\(.*\)/cp \1 \/work\/\1/" tmp > rename.sh
    などとすれば、即席でリネーム(remove, copy, etc.)スクリプトが出来上がる。
    $ ./rename.sh
    実行属性をしめすために* (アスタリスク) などがls の出力に含まれたら
    $ sed "s/*//g" tmp > tmp2
    でもしておく

  2. 最後の引数

    sed に対して以下のようにg を最後に指定すると

    $ sed "s/BEFORE/AFTER/g" TARGET_FILE
    一行に対して複数回変換を実行する。
    この辺はvi と一緒。
    このg をつけないと、一行の中に変換の文字列があっても一度しか変換されない。

  3. 2段階の変換(-e オプション)

    $ sed -e "s/BEFORE0/AFTER0/g" -e "s/BEFORE1/AFTER1/g" TARGET_FILE
    これは以下の2つの変換に相当する。
    $ sed "s/BEFORE0/AFTER0/g" TARGET_FILE
    $ sed "s/BEFORE1/AFTER1/g" TARGET_FILE

  4. ファイルからのスクリプト読み込み(-f オプション)

    ファイルに以下のように記載する。このとき、sed も 対象ファイル名も"ダブルクォーテーション"もいらない。
    保存するファイル名を tmp.sed とする。

    s/BEFORE0/AFTER0/g
    s/BEFORE1/AFTER1/g
    そしてsed を以下のように実行する。
    $ sed -f tmp.sed TARGET_FILE

    これは以下の2つの変換に相当する。
    $ sed "s/BEFORE0/AFTER0/g" TARGET_FILE
    $ sed "s/BEFORE1/AFTER1/g" TARGET_FILE

  5. 行指定

    1行目から5行目だけを変換の対象とする。

    $ sed "1,5s/BEFORE/AFTER/g" TARGET_FILE
    これはvi とまったく一緒。
    (というか、vim。というか、vim はsed をcall しているだけか。)

  6. パターンアドレス指定

    以下のようなテキストファイル"test"がある。

    $ cat test
    SHINNICHI CHONO
    SHINNICHI NAGATA
    SHINNICHI NAKAMURA
    SHINNICHI TENZAN
    SHINNICHI NISHIMURA
    ZENNICHI MUTOH
    ZENNICHI KOJIMAX
    ZENNICHI BABA
    NOAH MISAWA
    NOAH BARNING
    NOAH STARNESS
    このうち、"SHINNICHI" に対してのみ空白を" (CTU)" に変換したい。 そのときには以下のようにする。
    $ sed "/SHINNICHI/s/ / \(CTU\)/g" test
    SHINNICHI (CTU)CHONO
    SHINNICHI (CTU)NAGATA
    SHINNICHI (CTU)NAKAMURA
    SHINNICHI (CTU)TENZAN
    SHINNICHI (CTU)NISHIMURA
    ZENNICHI MUTOH
    ZENNICHI KOJIMAX
    ZENNICHI BABA
    NOAH MISAWA
    NOAH BARNING
    NOAH STARNESS
    すると、"SHINNICHI"を含む行だけが変換の対象となる。

  7. 行指定とパターンアドレス指定の混在

    こうすると併記可能

    $ sed "1,/^$/s/BEFORE/AFTER/g" TARGET_FILE
    これで1行目と空行(^$) が変換の対象の行となる。

  8. 削除コマンド

    これもアドレスの指定は行指定でもいいし、パターンアドレス指定でもいい。 ex) 1-5 行目削除

    $ sed "1,5d" TARGET_FILE
    ex) "ZENNICHI" を含む行は削除
    $ sed "/ZENNICHI/d" TARGET_FILE

  9. 追加コマンド
  10. 挿入コマンド
  11. ホールドスペース
    y/文字列1/文字列2/
    パターンスペース中の文字のうち、「文字列1」に含まれる文字を、 「文字列2」の同じ位置にある文字に置き換える。 「文字列1」と「文字列2」は同じ長さでなければならない。
    これを利用して以下のようなインクリメントがsed でかける。
    y/ 0123456789/11234567890/
    しかし、空行が対象にならないように注意
    http://www.gcd.org/sengoku/sedlec/9.txt
[目次]

参考文献・参考ウェブページ

[目次]
ご意見、ご感想、誤字、間違い等、お気づきの点がありましたら KGussan@Gmail.com まで連絡ください。
このウェブページの注意・免責事項 Copyright (C) 2004-2012 KGussan. [トップページ]
[PR:元国税局勤務の起業家向け、遺産相続の相談なら植村洋税理士事務所:一時間無料税理士相談。お気軽に。]