fc2ブログ

vi エディタでの空白文字の削除

vi エディタを使っていて
空白のみ削除する方法を探しました

前回は、vi の機能を使ってファイルの文字列を調べました

しかし、空白をカウントしていないのではなく
前回のテストのときには、改行をカウントしていないだけでした

今回は、空白文字だけを削除してみました

まず、ファイル内の半角空白を削除するには
:%s/ *//g
とします

これで、半角の空白が削除されます

次に、全角の空白を削除するには
:%s/ *//g
とします

これで全角の空白が消えます
全角の空白を消すのは、ソースコードや
設定ファイルの中に空白文字が混ざったときに対処するのに使えそうです

最後に、
:%s/./&/g
で文字数を確認し、消したことにより文字数が減っているなら成功です
スポンサーサイト



テーマ : Linux
ジャンル : コンピュータ

vi エディタでの文字数を調べる方法

vi テキストエディタを使い、ファイル内の文字数を調べることができます

最初は wc コマンドを使う予定でしたが、バイト数の取得などは
できるものの、文字数の取得はできないため、断念しました

ちなみに、wc コマンドは
【 wc 】 テキスト・ファイルの行数,単語数,バイト数を表示
を参照

今回、その代わりに行ったのが
vi エディタでの文字数のカウントです

Emacs で文字数を数える をみて
Emacs でもできるなら、vi でもできそうということで
vimでの文字数カウント方法
を参考に実験

vi test.txt

内容を
test
テスト

test
とし

:%s/./&/g
を実行

結果、日本語のバイト数、空白をカウントしないという
条件をみたしたので、今後、文字数のカウントには
この方法を使おうと思います

選択範囲にシェルのコマンドを実行


他にも、vi には便利な機能があります

指定した範囲に対して、シェルのコマンドを実行し、現在の内容と書き換えることができます

この構文は
範囲 !コマンド

になります

例として

linux fedora mac
windows mac win
linux fedora android
mac win ubuntu
debian redhat knopix
backtrack vine

という内容のファイルで
:%!cat -n
とすると

1 linux fedora mac
2 windows mac win
3 linux fedora android
4 mac win ubuntu
5 debian redhat knopix
6 backtrack vine
~
というように
番号がついて表示されます

また
:.,$w text.txt
というようすることで
指定した行を別のファイルに書き出すことも可能です

ただし、:w で保存したい場合
正規表現を使えません

正規表現を使って、当てはまる条件のものだけを別のファイルに抜き出すには

001:田中:男:21
002:鈴木:女:19
003:伊藤:男:31
004:山田:女:27
005:井上:男:18
006:佐藤:女:22

の場合
:w !grep ":男:" > men.txt
とすると
:男:
の文字を含む行だけを抜きだしたファイルを
作成できます

ちなみに内容は
001:田中:男:21
003:伊藤:男:31
005:井上:男:18

となり、無事に男の名前のみ抜き出したファイルが作成されました

ちなみに、行ったexコマンドの実行結果は
$history のように
:his
で実行結果をみれます

ただし、一度 vi を閉じると
この履歴は見れないようです

テーマ : Linux
ジャンル : コンピュータ

正規表現で置き換え文字を指定


正規表現を置き換え文字の指定に使えます

例として
001:田中:男:21
002:鈴木:女:19
003:伊藤:男:31
004:山田:女:27
005:井上:男:18
006:佐藤:女:22

という内容のファイルの性別のところを削除
してみます

:%s/:[男女]:/:/g
を実行すると

:男:と:女:の部分が
:
に置き換えられて
001:田中:21
002:鈴木:19
003:伊藤:31
004:山田:27
005:井上:18
006:佐藤:22

となります

また、vi のexコマンド :d と正規表現を
組み合わせ、対象行を設定できます

もし、:男: を含む行を削除するなら
:g/:男:/d
とすれば

001:田中:男:21
002:鈴木:女:19
003:伊藤:男:31
004:山田:女:27
005:井上:男:18
006:佐藤:女:22


002:鈴木:女:19
004:山田:女:27
006:佐藤:女:22

となります

この正規表現置き換えは
ビジュアルモード
でもできます

例として
:v で
ビジュアルモードになり範囲指定後に

をタイプすると

:'<,'>
がでるので
これに続いて 変更内容を記述します

今回は : を, に変更してみます

これを実行するには
:<','>s/:/,/g
とすれば
選択範囲が書き換えられ

001,田中,男,21
002,鈴木,女,19
003,伊藤,男,31
004,山田,女,27
005,井上,男,18
006,佐藤,女,22

となります

テーマ : Linux
ジャンル : コンピュータ

vi で正規表現による置き換え

vi 範囲を指定するときなどに
正規表現を使うと、効率的な
編集が可能になります

とくに、
コメントアウトなどの作業にはとても役立ちます

行頭を示す ^
ファイルの最後を示す $

現在のカーソルを示す .

これらを使い、現在のカーソル位置から
ファイルの最後まで、行頭に#を追加し
コメントアウトします

:.,$s/^/# /

unix mac linux unix windows linux
# unix mac linux unix windows linux
# unix mac linux unix windows linux
# unix mac linux unix windows linux
# unix mac linux unix windows linux
# unix mac linux unix windows linux

となりました

この方法を使うと
設定ファイルで、セキュリティ対応のため
コメントアウトするという場所が
たくさん存在するというときに
非常に役立ちます

さすがに
1行ずつ#を加えていくのは大変ですから



また、行頭が~で始まるところだけ置き換えるということもできます
これには
置き換えする範囲を正規表現で指定する機能をつかいます

構文は
:g/正規表現パターン/s/変える文字/変えたい文字/g
とします

今回の例では
行頭が linux で始まるところを変換してみます

linux fedora mac
windows mac win
linux fedora android
mac win ubuntu
debian redhat knopix
backtrack vine
~
というファイルを変更します

:g/^linux/s/linux/redhat enterprize/g
を実行すると

redhat enterprize fedora mac
windows mac win
redhat enterprize fedora android
mac win ubuntu
debian redhat knopix
backtrack vine

となりました

テーマ : Linux
ジャンル : コンピュータ

最新記事
検索フォーム
GREEハコニワ攻略サイト
リンク
カテゴリ
月別アーカイブ
フリーエリア
最新記事
FXプライムレート
最新コメント
最新トラックバック