というファイルがありますfoo.txt
。このファイルには次の値が含まれています。
abc.tar.gz
abc.1.1.tar.gz
bca-1.2.tar.gz
私はこのような出力を得たい
abc abc.tar.gz
abc.1.1 abc.1.1.tar.gz
bca-1.2 bca-1.2.tar.gz
同じ値/テキストが元の値/テキストの前に表示される必要があります。正規表現を使用してどのようにこれを達成できますか?
%s/^[a-z_-]*./\1/g
上記の表現を使用しましたが、出力が間違っています。
ベストアンサー1
キャプチャグループ:help /\(
パターンに一致する項目を内部に保存できます。その後、\(...\)
代替アイテム(または後でパターン自体)で一致を参照できます(\1
最初のグループ\2
などを介して)。
問題を解決する1つの方法(いくつかあります)は、.tar.gz
拡張子の前にファイル名をキャプチャすることです。置換には、キャプチャ(\1
)、スペース、元のテキスト(\0
、、または&
)を配置します。
:%substitute/\(.*\)\.tar\.gz$/\1 &/
または、拡張子の前にあるものを一致させて(一致終了のために\ze
)コピーすることもできます。
:%substitute/.*\ze\.tar\.gz$/& &/
試みに問題があります。
- 逆参照を使用しましたが、
\1
何もキャプチャしませんでした。 [a-z_-]
literalと一致しませんが、.
これはあなたの例に現れます。.
最後のエンディング(例:)から外れる方法はありません\.
。これはすべての文字と一致します。- 部品の交換には重複はありません。テキストを追加するのではなく、効果的に削除できます。