【发布时间】:2021-09-28 20:52:42
【问题描述】:
输入:
$ cat testing.list
deb [trusted=yes] http://10.47.4.220/repos/test-repo/11 /
$ echo $REPOVER
12
预期输出:
$ cat testing.list
deb [trusted=yes] http://10.47.4.220/repos/test-repo/12 /
请注意末尾数字的变化。
用单引号尝试 1(不工作):
$ sed -r 's#(.*/)([[:digit:]]+)([[:space:]]+/)$#\1$REPOVER\3#' testing.list
deb [trusted=yes] http://10.47.4.220/repos/test-repo/$REPOVER /
尝试 1.1 用不带变量的单引号(工作):
$ sed -r 's#(.*/)([[:digit:]]+)([[:space:]]+/)$#\112\3#' testing.list
deb [trusted=yes] http://10.47.4.220/repos/test-repo/12 /
用双引号尝试 2(不工作):
$ sed -r "s#(.*/)([[:digit:]]+)([[:space:]]+/)$#\1$REPOVER\3#" testing.list
sed: -e expression #1, char 44: unterminated `s' command
尝试 2.1 使用不带变量的双引号(不工作):
$ sed -r "s#(.*/)([[:digit:]]+)([[:space:]]+/)$#\112\3#" testing.list
sed: -e expression #1, char 44: unterminated `s' command
所以,sed 似乎不喜欢 double quotes。但是,除非我使用 double quotes,否则 Shell 不会扩展变量。
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>.
【问题讨论】: