ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

sed/awkコミュのsed でのホールドバッファの使用

  • mixiチェック
  • このエントリーをはてなブックマークに追加
ホールドバッファの使用について

sed には、一行処理だけじゃなくて、
複数行処理できる機能がありますよね。 クローバー

コマンドで言うと、

N; n; H; h; x; G; g;

あたり。

このあたりのコマンドって、
みなさんどういう風に使ってますか?

自分は、SQLの書き換えとかに結構使ってて、
select から、update を作るときとかにお世話になってます。

こんなかんじです。

SQL source:

select ID
from table
where ID > 100

sed script:

/select/ {     select と書かれた行だけ処理する
N;     次の行を読み込む
s/\(.*\)\n\(.*\)/\2\n\1/;     行をいれかえる
s/from/update/;     From句をUpdate句になおす
s/select/set/;      select句をset句になおす
s/$/ = 100/;      set句の値を入れる
}

SQL output:
update table
set ID = 100
where ID > 100


ほかにもこういう使い道があるぞ!っていう、
みなさんのTipsをぜひぜひおしえてください。 指でOK

よろしくおねがいします。電球

コメント(3)

複数行処理には、どうしても N やホールドバッファが必要になりますよね。

次の「テキストファイルの全ての行をカンマで繋げる sed スクリプト」がお気に入りです:

 sed ':;N;s/\n/,/;b' textfile.txt

ただし、対象ファイルのサイズが大きいとパターンバッファが肥大化しますので、sed らしくない処理ですが :-(

かつて、sed の限界に挑戦したくなって、ネタで「チューリングマシンコンパイラ」や「sed プレゼン」などを作成しましたが、 http://sed.sourceforge.net/ にあるスクリプト達の足元にも及びません(sokoban.sed とか)。

シブい!フローコントロールですね。電球

以前 Win32 系で、これと同じことをしようとして、
VBかなにかを使って、かなり長いコードでを書いて
実装しているのを見たことがあります。

こういう無駄の無い簡潔なやつをみると、sed の美学を感じますね。芽

バッファをどこまで使い切るかって話にもなりますけど、
通常の業務でのファイルの整形用途ではもっとも簡潔(なんせ13文字)な
プログラムでしょうね。

ありがとうございます。クローバー
ALPHAです。こんにちは。質問トピにくだらないものを投稿した者です(^^;;
覚えたての頃、こんなコトやって遊んでました(^^;;

sed -ne 'G;h;$p'

ホールドスペースのバッファサイズが溢れると動作が狂いますから、あくまで
おもちゃレベルですね(汗)

失礼いたしました

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

sed/awk 更新情報

sed/awkのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング