1

s3bin sync次のような形式の出力を含むファイルがあります

Sync: s3://my-bin-url/source/000/000/001.jpg -> s3://my-bin-url/400/x/000/000/001.jpg
Sync: s3://my-bin-url/source/000/000/002.jpg -> s3://my-bin-url/400/x/000/000/002.jpg
Sync: s3://my-bin-url/source/000/000/003.jpg -> s3://my-bin-url/400/x/000/000/003.jpg

次の内容を含むファイルになりたい

000/000/001.jpg
000/000/002.jpg
000/000/003.jpg

sed次のコマンドを使用してこれを実行しようとしています。これは#!/bin/shスクリプト内に含まれて$2おり、絶対ファイル パスに対応します。このファイルは常に存在します。

sed --in-place --regexp-extended '/.*((?:[0-9]{3}\/){2}[0-9]{3}\.jpg)/\1/gi' $2

スクリプトを実行すると、次のエラー メッセージが表示されます

sed: -e expression #1, char 36: Invalid preceding regular expression

この問題を調べようとしても、これまでのところ有用な応答は得られていません。提案のみが、/がエスケープされていることを確認すること (これはそうです) と をエスケープすること{}(これは、使用していない場合にのみ適用されるようです) に関するものです。--regexp-extended

4

2 に答える 2

2

あなたの sed コマンドには、おそらく最初にコマンドがありませんs

また、reg で代替正規表現区切り文字を使用して、エスケープを回避することもできます/

この sed は動作するはずです:

sed -i -r 's#.*(([0-9]{3}/){2}[0-9]{3}\.jpg)#\1#i' file
于 2013-08-07T15:09:11.150 に答える