2017-10-23 14 views
0

コマンド:これは以下のように今、私はシェルスクリプトを持っている(version.txtを)SEDやawkでの助けが必要私は内容のテキストファイル持って

#Project Name: XYZ 
#Module Name: ABC 
# 
# 
currentVersion=9.2.04 

currentVersion=9.2.05

へのversion.txtの最後の行を置き換えます

スクリプト:

ls_version=`grep -i currentVersion version.txt | awk '{print $NF}'` 
counter=`echo $ls_version | awk -F . '{print $NF}'` 
fs_version=`echo $ls_version | awk -F"." -v OFS='.' '{$NF=""; print $0}'` 
echo "counter b4 addition: $counter" 
counter=`expr ${counter} + 1` 
version=`echo ${fs_version}$counter` 
echo "ls_version: $ls_version" 
echo "fs_version: $fs_version" 
echo "counter post addition: $counter" 
echo "final version: $version" 
sed -i -e "s/\(currentVersion=\).*/\1$version/" version.txt 

ではなく、それはこのようなO/P与えます:

currentVersion=05 
currentVersion=05 
currentVersion=05 
currentVersion=05 
currentVersion=05 
currentVersion=05 
currentVersion=05 

このスクリプトで何が間違っているか教えてください。

ありがとうございます。

+3

を非常に多くの物事がうまくあります....のawkにはないパイプのgrepを行う、AWKの出力を格納し、エコーを使用していませんそれを別のawkにパイプし、exprを使わず、 'sed -i'を使わず、バッククォートの代わりに$()を使います。これは包括的なリストではありません。 –

+1

ファイルの内容に "currentVersion = 05"に置き換えられた行があるような最終的な 'sed'ファイルは表示されません。これをデバッグするには、 'sed -i'の使用をやめ、実際の出力を表示します(たとえば、" counter b4 addition "には何が表示されているのでしょうか?)、実際の入力、実際の出力コード。 –

+0

@William Pursell、ご返信ありがとうございます。 sed -Iを除去した後。私はversion.txtファイルに変更/更新がないのを見た。 – Celestial

答えて

1

次のawkは、Input_fileのバージョンを上げるのに役立ちます。

awk -F'.' '/currentVersion/{$3=sprintf("%02d",$3+1)"}"} 1' OFS="." Input_file 

出力は以下のようになります。

{#Project Name: XYZ 
#Module Name: ABC 
# 
# 
currentVersion=9.2.05} 
+0

カウンタ変数はどうですか?私もここでそれを使用していますか? – Celestial

0

thisに基づいて、私が書いた:

perl -pe 's/^currentVersion=((\d+\.)*)(\d+)(.*)$/$1.(sprintf("%02d", $3+1)).$4/e' file.txt 
+0

お返事ありがとうございます。申し訳ありませんが、ここではperlを使用できません。私はシェルスクリプトに固執する必要があります – Celestial

関連する問題