bash - sed - 循环仅替换出现中的最后一种语言 - 它应该替换所有

标签 bash shell sed

我正在尝试循环多种语言并在字符串中进行替换。 我不确定这是否是正确的方法或者我的错误是什么。

这是我的代码

langkeys=${LANG_KEYS}

for key in ${langkeys}
do

  sed -n "s/test.${key}/www.test.${key}.newdomain/g ;p" test.txt > /new-2.txt

done

RC 文件

LANG_KEYS="de
at
pl
"

我的问题是,只有 pl 语言被替换。

编辑:

我如何导出域名?

这是我在 RC 文件中的想法:

DOMAIN="test"
DOMAIN_SUFFIXE="test.net"

    sed -f <(printf 's/${DOMAIN}\.%s/www.${DOMAIN}.&.${DOMAIN_SUFFIX}/g\n' ${LANG_KEYS})  test.txt > /new-2.txt

最佳答案

您可以使用这个sed并避免任何循环:

sed -f <(printf 's/test\.%s/www.&.newdomain/g\n' $LANG_KEYS) test.txt > /new-2.txt

或者,如果您只想获取匹配的行:

sed -nf <(printf 's/test\.%s/www.&.newdomain/gp\n' $LANG_KEYS) test.txt > /new-2.txt

修复您尝试编辑的脚本:

LANG_KEYS="de
at
pl
"
DOMAIN="test"
DOMAIN_SUFFIX="net"

sed -f <(printf "s/$DOMAIN\.%s/www.&.$DOMAIN_SUFFIX/g\n" $LANG_KEYS) test.txt > /new-2.txt

关于bash - sed - 循环仅替换出现中的最后一种语言 - 它应该替换所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65950754/

相关文章:

regex - 使用grep/sed/awk提取特定字段对应的字符串

linux - 在 awk 中使用空行作为文件分隔符

bash - 从文本文件中解析出必要的部分

Linux Bash Shell 脚本 : How to "ls" a directory and check some output string?

linux - 从 .bashrc 脚本中止

linux - 如何处理 shell 脚本中的引号

linux - awk/sed : find string and return its previous index

linux - 使用 bash shell 解析 CSV 以打印得分最高的行

linux - 监控没有第 3 方包的目录变化

c - Pipe() 系统调用