Issue
Input:
$ cat testing.list
deb [trusted=yes] http://10.47.4.220/repos/test-repo/11 /
$ echo $REPOVER
12
Expected output:
$ cat testing.list
deb [trusted=yes] http://10.47.4.220/repos/test-repo/12 /
Please note the change in the number at the end.
Attempt 1 with single quotes (Not working):
$ sed -r 's#(.*/)([[:digit:]]+)([[:space:]]+/)$#\1$REPOVER\3#' testing.list
deb [trusted=yes] http://10.47.4.220/repos/test-repo/$REPOVER /
Attempt 1.1 with single quotes without the variable (Working):
$ sed -r 's#(.*/)([[:digit:]]+)([[:space:]]+/)$#\112\3#' testing.list
deb [trusted=yes] http://10.47.4.220/repos/test-repo/12 /
Attempt 2 with double quotes (Not Working):
$ sed -r "s#(.*/)([[:digit:]]+)([[:space:]]+/)$#\1$REPOVER\3#" testing.list
sed: -e expression #1, char 44: unterminated `s' command
Attempt 2.1 with double quotes without the variable (Not Working):
$ sed -r "s#(.*/)([[:digit:]]+)([[:space:]]+/)$#\112\3#" testing.list
sed: -e expression #1, char 44: unterminated `s' command
So, it seems like sed
does not like double quotes
. However, Shell won't expand variables unless I use double quotes
.
FWIW:
$ bash --version | head -1
GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)
$ sed --version
sed (GNU sed) 4.7
Packaged by Debian
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
Solution
Based on the sample data provided the proposed sed
can be simplified a bit:
$ sed -r "s|/[0-9]+ |/${REPOVER} |" testing.list
$ sed -r "s|/[[:digit:]]+ |/${REPOVER} |" testing.list
Find and replace the pattern /<at_least_one_number><space>
with /${REPOVER}<space>
Both of which produce:
deb [trusted=yes] http://10.47.4.220/repos/test-repo/12 /
Answered By - markp-fuso Answer Checked By - Mildred Charles (WPSolving Admin)