最初のn文字に基づいて単語を置き換える

最初のn文字に基づいて単語を置き換える

次のデータを含むファイルがあります。

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を参照してください。特定の正規表現の問題を解決するのに非常に役立つことがわかりました。

おすすめ記事