명령줄을 사용하여 빌드 번호를 1씩 늘리려고 합니다.
내 테스트 파일의 내용은 다음과 같습니다.
SOME_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 4;
SOME_SECOND_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 4;
내가 얻고 싶은 결과는 다음과 같습니다.
SOME_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 5;
SOME_SECOND_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 5;
나는 다음과 같은 것을 사용하려고합니다 :
sed -i -E "s/CURRENT_PROJECT_VERSION = (\d+);/CURRENT_PROJECT_VERSION = \1~;/" test.txt
나는 bash 스크립팅에 대한 경험이 없으며 숫자에 하나를 추가하는 방법도 모릅니다. (저는 MacOS를 사용하고 있지만 sed 명령은 Linux와 거의 동일합니다)
답변1
awk -F '= ' '/CURRENT_PROJECT_VERSION/{$2=$2+1";"}1' OFS='= ' input > output
시험
cat file
SOME_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 4;
SOME_SECOND_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 4;
awk -F '= ' '/CURRENT_PROJECT_VERSION/{$2=$2+1";"}1' OFS='= ' file
SOME_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 5;
SOME_SECOND_DUMMY_VALUE = -1;
CURRENT_PROJECT_VERSION = 5;
답변2
또 다른 답변은 awk
다음과 같은 구문을 따른다고 가정합니다 key <space> = <space> value;
.
awk '$1 == "CURRENT_PROJECT_VERSION" {$3=($3+1)";"}1' testfile.txt
이렇게 하면 으로 시작하는 모든 줄에서 세 번째 필드가 1씩 증가합니다. 그렇지 않으면 모든 줄을 "있는 그대로" 인쇄합니다(이것은 CURRENT_PROJECT_NUMBER
코드 블록 뒤에 있는 의미입니다).1
"아무것도 추가하는지 잘 모르겠습니다.시작with a number" 구문은 이식 가능하므로 증가하기 전에 필드 3에서 후행 세미콜론을 제거할 수 있습니다(약간 더 길지만).
awk '$1 == "CURRENT_PROJECT_VERSION" {sub(";","",$3); $3=($3+1)";"}1' testfile.txt
답변3
sed 및 bash 사용:
FILE="test.txt"
REGEX="\(CURRENT_PROJECT_VERSION *= *\)\([0-9]\+\);"
version=$(sed -ne "s/${REGEX}/\2/p" ${FILE} | head -1)
((version++))
sed -ie "s/${REGEX}/\1${version};/" ${FILE}
답변4
, 를 사용하여 perl
해당 위치에서 파일을 수정합니다.
perl -pi -e 's/\bCURRENT_PROJECT_VERSION\s*=\s*\K-?\d+/$& + 1/ge' test.txt