我正在使用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}
答案 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
。