gpt4 book ai didi

linux - 使用 Shell 变量替换 Sed 字符串

转载 作者:行者123 更新时间:2023-12-04 16:17:15 25 4
gpt4 key购买 nike

输入:

$ 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 不喜欢 双引号。但是,除非我使用 双引号,否则 Shell 不会扩展变量。

FWW:

$ 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>.

最佳答案

根据提供的示例数据提出建议 sed可以简化一点:

$ sed -r "s|/[0-9]+ |/${REPOVER} |" testing.list
$ sed -r "s|/[[:digit:]]+ |/${REPOVER} |" testing.list

查找并替换模式 /<at_least_one_number><space>/${REPOVER}<space>

两者都产生:

deb [trusted=yes] http://10.47.4.220/repos/test-repo/12  /

关于linux - 使用 Shell 变量替换 Sed 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68470187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com