BSD sed,如何插入带变量的字符串

时间:2017-12-01 22:13:04

标签: bash sed bsd

我正在使用MacOSX创建一个bash脚本,脚本会检查其他文件并将内容相互比较,从而创建一个递增计数器。必须首先执行使用计数器的函数,以便变量包含信息,因此似乎最好的选择是通过命令sed插入行。有没有办法让它可以忽略单引号创建的文字部分?这也是BSD sed,而不是GNU sed。或者如果除了使用sed之外还有其他选择,我会对知道如何操作感兴趣。

CODE:

sed -i '' '3i\
There are a total of ${ALOLANCOUNT} Pokemon in Alola, and you have ${HAVECOUNTER}, and need ${ALOLANNEEDCOUNTER}' $LOGFILE
sed -i '' '3i\
There are a total of ${NATIONALCOUNT} Pokemon in the world, and you need ${NATNEEDCOUNTER}' $LOGFILE

输出:

There are a total of ${NATIONALCOUNT} Pokemon in the world, and you need ${NATNEEDCOUNTER}
There are a total of ${ALOLANCOUNT} Pokemon in Alola, and you have ${HAVECOUNTER}, and need ${ALOLANNEEDCOUNTER}

1 个答案:

答案 0 :(得分:1)

'...'内未展开变量。 将单引号更改为双引号。 另一方面, 双引号内的\将被解释为转义后面的换行符, 但在这种情况下,您需要它为\的{​​{1}}命令的文字i。 在双引号内,您需要将其写为sed

把它放在一起,写成这样:

\\

正如https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/指出的那样,使用单引号会更加健壮, 并根据需要突破它,只引用使用变量的特定部分,如下所示:

sed -i '' "3i\\
There are a total of ${ALOLANCOUNT} Pokemon in Alola, and you have ${HAVECOUNTER}, and need ${ALOLANNEEDCOUNTER}" $LOGFILE

这更强大, 因为这样你就不需要扫描整个字符串,如果有可能需要转义的东西,比如我的第一个提案中的sed -i '' '3i\ There are a total of '"${ALOLANCOUNT}"' Pokemon in Alola, and you have '"${HAVECOUNTER}"', and need '"${ALOLANNEEDCOUNTER}" $LOGFILE