2016-12-23 18 views
0

ファイルの日付は、YYYY-MM-DDの形式で記載されています。そして、私は日付書式をDD/MM/YYYYに変更するシェルスクリプトを書いています。 これは私が次のエラー "sedの` s'のに未知のオプション:-e式#1、CHAR 51" を取得シェルスクリプトのファイルで日付形式を変更するにはどうすればよいですか?

#!/bin/bash 
NR=$(cat $1 | grep -o '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' | cut -d'-' -f 1,1 | wc -l) 
for ((i=1; i<=$NR; ++i)) 
do 
    Y=$(cat $1 | grep -o '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' | cut -d'-' -f 1,1 | head -1) 
    M=$(cat $1 | grep -o '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' | cut -d'-' -f 2,2 | head -1) 
    D=$(cat $1 | grep -o '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' | cut -d'-' -f 3,3 | head -1) 
sed 's/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/"$D/$M/$Y"/' $1 
done 

を動作しません。私の最初の試みであるあなたがいない

答えて

0

文字列の一部に変数が必要です。 \(...\)のグループ分けを使用すると、Sedはすでに試合の一部を覚えています。

をリテラルと置換区切り文字として同時に使用することはできません。どちらのリテラルスラッシュをバックスラッシュ、または別の区切り文字を使用します。

sed 's/\([0-9]\{4\}\)-\([0-9][0-9]\)-\([0-9][0-9]\)/\3\/\2\/\1/g' 

または

sed 's=\([0-9]\{4\}\)-\([0-9][0-9]\)-\([0-9][0-9]\)=\3/\2/\1=g' 
+0

が、私はスラッシュをエスケープすることはできませんか? –

+0

@DenisNichita:できますが、読みにくいと感じます。アップデートを確認してください。 – choroba

+0

私は記事で述べたのと同じエラーが出ます。 –

関連する問題