Reputation: 27
I am taking the version code from user input and trying to replace the existing version code with the new one.
The file which contains version code is named "Version.gradle"
, it contains
defaultConfig {
applicationId "com.service_app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
}
I am able to get the version from user, but I don not know how to replace the new version code with exiting one. I am using the below pattern to fetch the existing version code.
echo "Enter versionCode"
read versionCode
replacement=$(sed 'versionCode=\"(\\d+)\"' Version.gradle)
replacement=${versionCode}
sed "s/PATTERN/$replacement/g" Version.gradle
Current Output:
command : sed e version.sed
Enter versionCode
2
sed: -e expression #1, char 22: expected newer version of sed
sed: can't read Version.gradle: Permission denied
Expected Output:
In version.gradle file, 2 should replace the already existing version code.
Upvotes: 3
Views: 1724
Reputation: 626689
First, make sure you have write access to the file.
Then, you may use
sed -i "s/\(versionCode[[:space:]]*\)[0-9]*/\\1${versionCode}/" file
Using FreeBSD sed:
sed -i '' "s/\(versionCode[[:space:]]*\)[0-9]*/\\1${versionCode}/" file
POSIX BRE pattern & replacement details
\(versionCode[[:space:]]*\)
- Capturing group 1:
versionCode
- a literal word[[:space:]]*
- 0 or more whitespaces[0-9]*
- 0 or more digits\1
- Group 1 placeholder, it puts back the value captured in Group 1 back into the resulting string${versionCode}
- the versionCode
contents (note the double quotes surrounding the command, they enable variable expansion).See the online sed
Linux demo:
test=' defaultConfig {
applicationId "com.service_app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
}'
echo "Enter versionCode"
read versionCode
echo "$versionCode"
sed "s/\(versionCode[[:space:]]*\)[0-9]*/\1${versionCode}/" <<< "$test"
Upvotes: 2