2017-10-23 17 views
0

내가 내용을 텍스트 파일이 명령 : currentVersion=9.2.05는 나오지 도움이 필요하고 AWK는

에의 version.txt의 마지막 줄을 대체하는 아래와 같이 (의 version.txt)

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

가 지금은 쉘 스크립트가를

스크립트

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 

하지만 대신이 같은 오/p를 제공합니다

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

이 스크립트의 잘못된 점을 알려주십시오. 다음 AWK는 당신이 당신의 INPUT_FILE의 버전을 향상하는 데 도움이 될 것입니다 사전

+3

에코 사용 후 AWK의 출력을 저장하지 않으며,이 때문에 많은 것들이 .... 잘못 AWK로하지 파이프 GREP을 다른 awk에 파이프하기 위해서, expr을 사용하지 말고, 'sed -i'를 사용하지 말고, 역 인용 부호 대신 $()를 사용하십시오. 이것은 완전한 목록은 아닙니다. –

+1

마지막'sed'에서 파일 내용에 "currentVersion = 05"로 바뀌는 각 줄을 표시하는 내용이 보이지 않습니다. 이것을 디버깅하려면'sed -i'를 사용하지 말고 실제 결과를 보여 주어야합니다 (예를 들어, "counter b4 addition"에 무슨 일이 일어 났을 까? 아마도 당신이 실행중인 코드는 보여주고있는 코드가 아닙니다), 실제 입력과 실제 암호. –

+0

@William Pursell, 귀하의 회신에 감사드립니다. sed -I를 제거한 후. version.txt 파일에는 변경/업데이트가 없습니다. – Celestial

답변

1

감사합니다.

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