使用sed将字符串替换为变量的内容,即使它是转义字符

vil*_*mer 5 string bash sed

我正在使用 用户指定的字符串sed -e "s/\*DIVIDER\*/$DIVIDER/g"替换*DIVIDER*,该字符串存储在$DIVIDER.问题是我希望他们能够将转义字符指定为分隔符,例如\n或\ t.当我尝试这个时,我最后得到字母n或t,或者等等.

有没有人对如何做到这一点有任何想法?非常感谢!

编辑:这是剧本的核心,我必须遗漏一些东西.

curl --silent "$URL" > tweets.txt

if [[ `cat tweets.txt` == *\<error\>* ]]; then
    grep -E '(error>)' tweets.txt | \
    sed -e 's/<error>//' -e 's/<\/error>//' |
    sed -e 's/<[^>]*>//g' |

head $headarg | sed G | fmt

else
    echo $REPLACE | awk '{gsub(".", "\\\\&");print}'
    grep -E '(description>)' tweets.txt | \
    sed -n '2,$p' | \
    sed -e 's/<description>//' -e 's/<\/description>//' |
    sed -e 's/<[^>]*>//g' |
    sed -e 's/\&amp\;/\&/g' |
    sed -e 's/\&lt\;/\</g' |
    sed -e 's/\&gt\;/\>/g' |
    sed -e 's/\&quot\;/\"/g' |
    sed -e 's/\&....\;/\?/g' |
    sed -e 's/\&.....\;/\?/g' |
    sed -e 's/^  *//g' |
    sed -e :a -e '$!N;s/\n/\*DIVIDER\*/;ta' |   # Replace newlines with *divider*.
    sed -e "s/\*DIVIDER\*/${DIVIDER//\\/\\\\}/g" |          # Replace *DIVIDER* with the actual divider.

    head $headarg | sed G
fi
Run Code Online (Sandbox Code Playgroud)

sed行的长列表正在替换XML源中的字符,最后两个是应该用指定字符替换换行符的那些.我知道用另一个换行替换换行似乎是多余的,但这是我能想出来让他们选择自己的分频器最简单的方法.分隔符替换适用于普通字符.

tan*_*ens 7

您可以使用bash来反转反斜杠,如下所示:

sed -e "s/\*DIVIDER\*/${DIVIDER//\\/\\\\}/g"
Run Code Online (Sandbox Code Playgroud)

语法是${name/pattern/string}.如果pattern开头/的每一次出现patternname被替换string.否则只更换第一次出现.