2014-09-18 2 views
-2
bash-3.2$ FNAME=$1 
bash-3.2$ OLD_NO=$(grep "_version=" | awk -F '"' '{print $12}' $FNAME) 

2 번 라인이 작동하지 않는 것 같습니다. 닫지 않거나 정확하게 인용하지 않습니까? 이변수 내에서 grep 및 awk를 사용하는 BASH

이 제안 아래에 반영하기 위해 스크립트를 업데이트 걸 것으로 보인다

echo $OLD_NO 
OLD_NO=$(grep '_version=' "$FNAME" | awk -F '"' '{print $12}') 
#Get the version of the 
echo "What do you want to update release number to?" 
REPLACEMENT="_version="$NEW_NO 
echo $REPLACEMENT 
sed -i ''s/$OLD_NO/$REPLACEMENT/g'' $FNAME 

~

얻을 새로운 오류가 떠들썩한 파티에서

bash-3.2$ ./vu reader.xml 

What do you want to update release number to? 
_version= 
sed: -e expression #1, char 0: no previous regular expression 

작동하지만

bash-3.2$ grep _version market_rules_cd.reader.xml | awk -F '"' '{print $12}' 

14.8.21.1

+0

마지막에 '$ 1'의 필요성은 무엇입니까 : SED) 그러나이 경우에만 _version=을 포함하는 라인 작업을 제한하는 정규식 조건을 사용할 수 있습니까? –

+2

'grep'은 표준 입력에서 그 입력을 기다리고 있습니다; 나는'awk'가 아니라'grep' 다음에'$ FNAME'을 넣기를 원한다고 생각합니다. – chepner

+0

내가 대답 한 이후로 귀하의 질문이 급격하게 변경되었습니다. (예 : 코드에 내 대답 포함). 변경 사항을 롤백했습니다. 추가 도움이 필요하면 새로운 질문을하십시오. – hek2mgl

답변

2

grep '_version='은 파일 이름 인수를 전달하지 않았기 때문에 stdin에서 대기를 중단하므로 줄이 중지됩니다. 매달리지 않게하려면 파일 이름을 awk가 아니라 grep으로 전달하십시오. AWK는 다음 프로세스 GREP의 출력이됩니다

OLD_NO=$(grep '_version=' "$FNAME" | awk -F '"' '{print $12}') 
Btw는

: 다음과 같은 형태를 갖는 프로그램을 awk가

OLD_NO=$(awk -F '"' '/_version=/ {print $12}' "$FNAME") 

참고 : 작업에만, 당신은 GREP이 필요하지 않습니다 awk 수행 할 수 있습니다 :

condition { action } [; more of them ] 

작업을 모든 행에 적용해야하는 경우 조건을 생략 할 수 있습니다.

/_version=/ { print $12 } 
+2

'FNAME'은 검색 할 실제 값이 아닌 검색 할 파일의 이름이라고 생각합니다. – chepner

+0

힌트를 위해 @chepner thx! 답변을 업데이트했습니다. – hek2mgl

+0

쉘에서 사용하면 결과가 없습니다. –

관련 문제