次のデータを含むファイルがあります。
ab001
ab002
ab003
ab004
「ab」で始まるすべての単語を「ab001」に置き換える必要があります。つまり、変更後のファイルは次のようになります。
ab001
ab001
ab001
ab001
%s/ab*/ab001/g
エディタで試しましたが、VI
期待した結果が出ませんでした。私もGoogleを試しましたが、解決策が見つかりませんでした。
ベストアンサー1
これでマークしたから肉最初にviについて質問をしましたが、viでなぜ動作しないのか、どのように解決するのかを説明します。最初に次のことを試したと言われました。
%s/ab*/ab001/g
検索は、以前の*
原子を0回以上、できるだけ一致させるように機能します。から:h /*
:
*/star* */\star*
* (use \* when 'magic' is not set)
Matches 0 or more of the preceding atom, as many as possible.
この場合、前の原子は「b」なので、この検索は次のいずれかと一致します。
a
ab
abbb
abbbbbbbbbbbbbbbbbbb
また、一致しますab001
が、最初の部分のみが一致するため、一致はです(ab)001
。 Viはあなたがこれを探していることを発見し、それを(ab001)001
。解決策は簡単です。あなたは一致したいです
「ab」の後に何も出てこない
ドット文字(.
)は、改行文字を除くすべての文字と一致します。だから検索してみると
/ab.*/
一致する何もない「ab」で始めてください。だからあなたは以下が欲しい:
:%s/ab.*/ab001/g
一致するものが多すぎる場合(たとえば、「絶対に」などの単語など)、数字だけを見つけるように単純化できます。たとえば、「ab」の後にランダムな数字が続く場合と一致します。
/ab\d*/
これは、「ab」の後に3桁の数字が続くものと一致します。
/ab\d\{3}/
ブックマークをお勧めします。このページクイックvi-regexを参照してください。特定の正規表現の問題を解決するのに非常に役立つことがわかりました。