如果我退出使用变量,只需将正则表达式直接写入最后一个sed命令, 一切正常。但就像在这里一样,没有进行替换?
#!/bin/bash
#html substitutions
ampP="\&"
ampR="&"
ltP="\<"
ltR="<"
gtP="\>"
gtR=">"
quotP="\""
quotP2='\“'
quotP3="\”"
quotR="\""
tripDotP="\…"
tripDotR="..."
tickP="\’"
tickR="\´"
#get a random page, and filter out the quotes
#pick a random quote
#translate wierd html symbols
curl "www.yodaquotes.net/page/$((RANDOM % 9 +1))/" -Ls | sed -nr 's/.*data-text=\"([^\"]+)\".*/\1/p' \
| sort -R | head -n1 \
| sed 's/"$ampP"/"$ampR"/g; s/$ltP/$ltR/g; s/$gtP/$gtR/g; s/$quotP/$quotR/g; s/"$quotP2"/"$quotR"/g; s/$quotP3/$quotR/g; s/$tripDotP/$tripDotR/g; s/$stickP/$stickR/g'
答案 0 :(得分:1)
这种sed不起作用:
sed 's/"$ampP"/"$ampR"/g'
因为错误的shell引用。您的shell变量将不会在单引号中展开。尝试使用此表单:
sed "s~$ampP~$ampR~g"
答案 1 :(得分:1)
调试101:让我们只收到echo
收到的内容:
echo 's/"$ampP"/"$ampR"/g; s/$ltP/$ltR/g; s/$gtP/$gtR/g; s/$quotP/$quotR/g; s/"$quotP2"/"$quotR"/g; s/$quotP3/$quotR/g; s/$tripDotP/$tripDotR/g; s/$stickP/$stickR/g'
s/"$ampP"/"$ampR"/g; s/$ltP/$ltR/g; s/$gtP/$gtR/g; s/$quotP/$quotR/g; s/"$quotP2"/"$quotR"/g; s/$quotP3/$quotR/g; s/$tripDotP/$tripDotR/g; s/$stickP/$stickR/g
现在看起来不对,是吗?
bash中的单引号内有无变量替换。这就是为什么我们有两个不同的引号,所以你可以决定哪一个更适合这个任务。
为了便于阅读,我建议将每个sed命令放在双引号内。
像这样:"s/$ampP/$ampR/g"