vimで正規表現で


1行目 abc def ghi 3000
2行目 jkl mno pqr 40000
3行目 stu vwx yzA 1000
4行目 abc def ghi 5000

1.「def」のある行だけ残す方法
2.数値の部分が5000以上の行だけ残す方法
をそれぞれ知りたいのですが。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2009/01/22 00:09:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:paraizo No.1

回答回数139ベストアンサー獲得回数10

ポイント40pt

1.:v/def/d

2.:g/[¥d]+[5-9]000$/d

id:dedara

なぜか2.の方がパターンが見つからないと出てしまいます。

あと2.の方は数値のあとにもスペースを挟んで文字が続く想定でお願いしたかったのです…

2009/01/21 02:12:37

その他の回答3件)

id:paraizo No.1

回答回数139ベストアンサー獲得回数10ここでベストアンサー

ポイント40pt

1.:v/def/d

2.:g/[¥d]+[5-9]000$/d

id:dedara

なぜか2.の方がパターンが見つからないと出てしまいます。

あと2.の方は数値のあとにもスペースを挟んで文字が続く想定でお願いしたかったのです…

2009/01/21 02:12:37
id:komamitsu No.2

回答回数21ベストアンサー獲得回数2

ポイント5pt

久しぶりにvimの正規表現を書いてみた

1.

:%!perl -ne 'next unless /def/; print'

2.

:%!perl -ne 'next if /(\d+)$/ and $1 < 5000; print'

って邪道か…

id:dedara

私の環境だとperlを認識しませんでした

2009/01/21 02:07:41
id:romeo_t No.3

回答回数15ベストアンサー獲得回数1

ポイント15pt

2つめの方ですが、「:v/[\d]*[05-9]000/d」では如何でしょうか。

ただし数値が「0000」だけでもマッチしますのでご注意を。

id:dedara

できました。ありがとうございます

2009/01/22 00:02:49
id:guyon No.4

回答回数3ベストアンサー獲得回数0

ポイント40pt

こんな感じでどうでしょうか?

:g!/def/d
:g!/\([5-9]\d\{3,3}\)\|\([1-9]\d\{4,}\)/d
id:dedara

できました。あと「\|\」このような書き方を知らなかったので

ひじょうに参考になりました。

2009/01/22 00:03:30
  • id:paraizo
    昼間見直したら壮絶に間違ってますね

    とりあえずこんな感じで書いてみました、magicの有無でエスケープが変わるのがvimの嫌らしいところです
    :v/\(\d\{2,}\|[56789]\)\d\{3}/d
  • id:dedara
    magicという概念を知りませんでした。
    自分はどうやらoffだったみたいなのでエスケープつけて書かないとダメだったということですね。
    勉強なりすぎ

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません