Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
324 views
in Technique[技术] by (71.8m points)

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

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
' ${LANG_KEYS})  test.txt > /new-2.txt
question from:https://stackoverflow.com/questions/65950754/sed-loop-only-replaces-the-last-language-in-a-occurences-it-should-replace-a

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You may use this single sed and avoid any loop:

sed -f <(printf 's/test.%s/www.&.newdomain/g
' $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
' $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
" $LANG_KEYS) test.txt > /new-2.txt

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...