sed を使用して式を置き換えようとしています。正規表現はvimでは機能しますが、sedでは機能しません。数字の前の最後のダッシュをスラッシュに置き換えているので、
/www/file-name-1
戻るべき
/www/file-name/1
次のコマンドを使用していますが、代わりに /www/file-name/0 を出力し続けます
sed 's/-[0-9]/\/\0/g' input.txt
私は何を間違っていますか?
後で参照するためにデータを括弧で囲む必要がありsed
、1 で数え始めます。括弧を必要とせずに一致したすべての文字を復元するには、&
記号を使用します。
sed 's/-\([0-9]\)/\/\1/g' input.txt
これにより、次の結果が得られます。
/www/file-name/1
後方参照( a を開始\1
)する前に、括弧を使用してキャプチャする必要があります。試してくださいsed -r 's|(.*)-|\1/|'
:
$ sed -r 's|(.*)-|\1/|' <<< "/www/file-name-1"
/www/file-name/1
任意の区切り記号を使用できるsed
ため/
、置換に が含まれている場合は最適な選択ではありません/
。この-r
オプションは拡張正規表現用であるため、括弧をエスケープする必要はありません。
OSXではsedが1から後方参照のカウントを開始しているようです。\1
代わりに試してください\0