sed - loop only replaces the last language in a occurences - it should replace all

Viewed 44

I'm trying to loop over multiple languages ti be replace in a string. And I'm unsure if this is even the right way or what my mistake is.

Here is my code

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 File

LANG_KEYS="de
at
pl
"

My problem is, only the pl language is being replaced.

EDIT:

How could i export the domains ?

Here is my idea in the RC FILE:

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
1 Answers

You may use this single sed and avoid any loop:

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

Or if you want to get only matched lines:

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

Fix to your attempted edited script:

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
Related