3

以下を考えると、1または2または3で始まる行にコメントしたいと思います

Some text
1 101 12
1 102 13
2 200 2
// Some comments inside
2 202 4
2 201 7
3 300 0
3 301 7
Some other text

次の正規表現は正しいように見えますが、機能しません..

%s/^([123])(.+)/#\1\2/g

egrep で使用すると、同じ正規表現が一致します

egrep '^([123])(.+)' file_name

この検索と置換が VI で失敗する理由を理解するのを手伝ってください

4

2 に答える 2

3

文字をエスケープする必要があります: ()+. を行うこともできますが%s/^\([123]\)\(.\+\)/#\1\2/g、実行する方が簡単なようです::g/^[123]/s/^/#

vi には、パターン内の記号の意味を変更するためのさまざまなオプションがあることに注意してください ( help magic)。特に、'very magic' を使用して次のことを行うことができます(ここではフラグが完全に冗長で:%s/\v^([123].+)/#\1/gあることに注意してください!)g

于 2012-06-01T18:18:01.763 に答える
0

パールでは、

my $t = "Some text
1 101 12
1 102 13
2 200 2
2 202 4
2 201 7
3 300 0
3 301 7
Some other text";

foreach (split /^/, $t) {
  $_ =~ s/^([1-3])/# $1/;
  print $_;
}

結果:

Some text
# 1 101 12
# 1 102 13
# 2 200 2
# 2 202 4
# 2 201 7
# 3 300 0
# 3 301 7
Some other text
于 2012-06-01T18:22:21.297 に答える