8

sed を使用して式を置き換えようとしています。正規表現はvimでは機能しますが、sedでは機能しません。数字の前の最後のダッシュをスラッシュに置き換えているので、

/www/file-name-1 

戻るべき

/www/file-name/1

次のコマンドを使用していますが、代わりに /www/file-name/0 を出力し続けます

sed 's/-[0-9]/\/\0/g' input.txt

私は何を間違っていますか?

4

3 に答える 3

15

後で参照するためにデータを括弧で囲む必要がありsed、1 で数え始めます。括弧を必要とせずに一致したすべての文字を復元するには、&記号を使用します。

sed 's/-\([0-9]\)/\/\1/g' input.txt

これにより、次の結果が得られます。

/www/file-name/1
于 2013-03-03T17:49:05.357 に答える
5

後方参照( a を開始\1)する前に、括弧を使用してキャプチャする必要があります。試してくださいsed -r 's|(.*)-|\1/|'

$ sed -r 's|(.*)-|\1/|' <<< "/www/file-name-1" 
/www/file-name/1

任意の区切り記号を使用できるsedため/、置換に が含まれている場合は最適な選択ではありません/。この-rオプションは拡張正規表現用であるため、括弧をエスケープする必要はありません。

于 2013-03-03T17:58:04.273 に答える
0

OSXではsedが1から後方参照のカウントを開始しているようです。\1代わりに試してください\0

于 2013-03-03T17:39:02.797 に答える