아래 파일에서 "100"을 변수에 저장된 값으로 바꿔야 합니다.
파일.txt:
dropNumber = 100
patchNumber = 8.8.0.80
randomNumber = 10000
versionCode = dropNumber + patchNumber
실패한 몇 가지 옵션을 시도했습니다. 1)
NEW_DROP_NUMBER=200
OLD_DROP_NUMBER=$(cat file.txt | grep dropNumber | head -1 | sed 's/^.*= //')
echo "Drop Number: $NEW_DROP_NUMBER" | awk -v srch="$OLD_DROP_NUMBER" -v repl="$NEW_DROP_NUMBER" '{ sub(srch,repl,$0); print $0 }' file.txt > file.txt && mv properties.tmp file.txt
이 접근 방식은 의도하지 않은 RandomNumber 값도 대체합니다.
2)
sed -i -e 's/$OLD_DROP_NUMBER/$NEW_DROP_NUMBER/g' file.txt
그러면 "sed: s/100/200/g: 해당 파일이나 디렉터리가 없습니다"라는 오류가 반환됩니다.
예상되는 값만 바꾸도록 명령을 설계하는 데 도움을 줄 수 있는 사람이 있습니까?
답변1
awk 프로그램에는 다음이 포함됩니다.모드{액션}예: 제공하지 않는 경우무늬, 그 다음에행동모든 레코드에 적용됩니다. 귀하의 경우 다음으로 시작하는 레코드(라인)만 일치시키는 패턴을 추가할 수 있습니다 dropNumber
.
awk ... '/^dropNumber/ { sub(srch,repl,$0) } { print }' ...
Sed와 유사하며 정규 표현식을 사용합니다.주소필수 라인만:
sed "/^dropNumber/s/$OLD_DROP_NUMBER/$NEW_DROP_NUMBER/"
(질문에 표시된 작은따옴표 대신 큰따옴표가 필요합니다. 그렇지 않으면 쉘 변수는 문자열 리터럴로 처리됩니다.)