2

次のようなディレクトリ文字列があります。

build_result/09_abc_WQVGA_FullTouch_15M.xyz

最後の文字の前にファイルの日付を挿入したいので.(接頭辞が_)、次のように sed を使用します。

newname=`echo $filename | sed -n 's/\./\_'"$date"'\./p'`

これ$dateは sed コマンドの前に計算されており、結果は次のとおりです。

build_result/09_abc_WQVGA_FullTouch_15M_20120420.xyz

ただし、次のようなファイル名がある場合があります。

build_result/09_abc_WQVGA_FullTouch_1.5M.xyz

最後のものの前に追加.すると、sedは$date最初のの前に挿入し.ます $date最後の前にのみ挿入する方法は.

4

3 に答える 3

3

他の人もカバーsedしているので、シェルの機能を使用してそれを行うことを提案します。
オーバーヘッドが少なくなります(サブシェルの生成..)!

$ file='build_result/09_abc_WQVGA_FullTouch_15M.xyz'
$ newfile="${file%.*}_$date.${file##*.}"
$ echo "$newfile"
build_result/09_abc_WQVGA_FullTouch_15M_20120420.xyz

sed私はこれで行くだろうを使用して:

sed "s/\(.*[^.]\)\./\1_$date./g"
于 2012-04-20T14:11:32.660 に答える
2

試す:

sed -n 's/\(.*\)\./\1_'"$date"'./p'
于 2012-04-20T13:50:46.053 に答える
1

たとえば、次のようにします。

date=2012-04-17
echo "demo.txt.foo" | sed -nr 's/(.*)\.([^.]*)/\1_'$date'.\2/p'
demo.txt_2012-04-17.foo

日付にスラッシュが含まれている場合は、sed に別の区切り文字を選択する必要があります。

date=2012/04/17
echo "demo.txt.foo" | sed -nr 's|(.*)\.([^.]*)|\1_'$date'.\2|p'
demo.txt_2012/04/17.foo

sed は貪欲に一致しようとするため、リテラルのドットに一致する前に、できるだけ多くの文字をキャプチャしようとします。その[^.]*貪欲な一致の背後にあるドットを除くすべてを指定します。

sed -rバナナ括弧のマスキングを省略できます。

于 2012-04-20T13:54:11.853 に答える