2011年09月18日

Linux の sed を使って、複数行を置き換えるには

sed を使って文字列を置き換えるには、置き換える前の文字列と置き換えた後の文字列を指定します。 その際、置き換える前の文字列は、正規表現を使って柔軟に指定することができます。

柔軟に指定できるといっても、複数行にまたがる文字列にマッチするような表現をすることはできません。

しかし、複数行からなる置き換える前の文字列のうち、先頭の行と末尾の行のそれぞれに、正規表現を使ってマッチさせて、複数行を置き換えることはできます。

sed -e "/FirstLine/,/LastLine/cLine1\
Line2\
Line3" "$Path"

Line1 の前の c は、コマンド名です。 複数行を削除するときは、d コマンドを使います。

今月に公開予定の bashlib1 に、上記の機能を使いやすくかつ読みやすくなる ReplaceTextFileLineRange_func 関数を追加しました。 さらに、複数行からなる文字列でも、インデントできるようにする MultiLine_func 関数も追加しました。 上記の sed コマンドは、次のようになります。

local a1 ; a1=`MultiLine_func "\n" \
__"Line1" \
__"Line2" \
__"Line3" `
ReplaceTextFileLineRange_func "$Path" "FirstLine" "LastLine" "$a1"

sed の man やインターネットを検索しても、上記の sed のコードの意味は分かりません。 sed のアドレスと c コマンドを調べればいいなんて、sed を熟知している人しか分かりません。 しかし、bashlib がインターネットに公開され、Google が HTML5+SVG を解読できれば、数日のうちに Snap Note で作られた ReplaceTextFileLineRange_func が検索できるようになり、すぐにコードの意味が分かるようになるでしょう。 まぁ、ReplaceTextFileLineRange_funcに限れば、この記事のブログにもヒットするでしょうし。

sage_p at 23:16│Comments(0)TrackBack(0)プログラミング 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔