とあるエンジニアの備忘log
2014年5月14日水曜日
sed で遊ぶ
それなりに実用的だと思われる例を書き留めておきます。 ほとんど、 Linux Kernel のコーディングスタイル絡みですが。。 #### 2 行以上連続する空行を 1 行の空行にまとめる #### /^$/ { N /^\n$/D } `N` は次の行をパターンスペースに読み込む。 `D` はパターンスペース中に最初に現れる `\n` までを削除し、スクリプトの先頭に戻る。 #### 8 スペースによるインデントを タブに置き換える #### 視認性のために、以下のコードではスペースを `SPC`, タブを `TAB` と書いている。 :foo s/^\(TAB*\)SPC\{8\}/\1TAB/ t foo `:foo` はラベル。 `t foo` は直前の置換が成功したら、ラベル `foo` に分岐するという意味です。 例えば、行頭にスペースが 16 個あったら、タブ 2個に置き換えて欲しいので、ループを使ってみた。 #### 行末の空白文字を削除する #### これは簡単。 s/[[:space:]]*$// `[[:space:]]` はスペースとタブにマッチします。 #### ファイル末の空行を削除する #### :top /^\n*$/ { $d N b top } ファイル末に 2 行以上連続する空行がある場合には、すべて削除したいので、 上記のようなスクリプトになりました。 ${ /^$/d } というスクリプトだと、最終行の空行のみ削除します。 これでも、最初の例の「複数行の空行を1行にまとめる」と組み合わせると、十分目的は達成できます。 #### ファイル先頭の空行を削除する #### 0,/^..*$/ { /^$/d } ファイル先頭に 2 行以上連続する空業がある場合にも、すべて削除されます。 `0,/^..*$/` は範囲指定で、ファイル先頭から、空行でない行が出現するまでマッチします。
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿