BSD sed,如何插入带有变量的字符串
BSD sed, How to insert a string with variables
我正在使用 MacOSX 创建这个 bash 脚本,该脚本会检查其他文件并将内容相互比较,从而创建一个递增计数器。使用计数器的函数必须首先执行,以便变量包含信息,因此最好的选择似乎是通过命令 sed 插入该行。有什么方法可以忽略单引号创建的文字部分吗?这也是 BSD sed,而不是 GNU sed。或者,如果除了使用 sed 之外还有其他选择,我很想知道该怎么做。
代码:
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}
变量在'...'
内部没有展开。
将单引号更改为双引号。
另一方面,
双引号内的 \
将被解释为转义其后的换行符,
但在这种情况下,对于 sed
的 i
命令,您需要它是文字 \
。
在双引号内,您需要将其写为 \
.
放在一起,这样写:
sed -i '' "3i\
There are a total of ${ALOLANCOUNT} Pokemon in Alola, and you have ${HAVECOUNTER}, and need ${ALOLANNEEDCOUNTER}" $LOGFILE
正如@EdMorton指出的那样,使用单引号会更健壮,
并根据需要中断它以仅双引号使用变量的特定部分,如下所示:
sed -i '' '3i\
There are a total of '"${ALOLANCOUNT}"' Pokemon in Alola, and you have '"${HAVECOUNTER}"', and need '"${ALOLANNEEDCOUNTER}" $LOGFILE
这个更健壮,
因为这样你就不需要扫描整个字符串,如果有可能需要转义的东西,比如我第一个提案中的\
。
我正在使用 MacOSX 创建这个 bash 脚本,该脚本会检查其他文件并将内容相互比较,从而创建一个递增计数器。使用计数器的函数必须首先执行,以便变量包含信息,因此最好的选择似乎是通过命令 sed 插入该行。有什么方法可以忽略单引号创建的文字部分吗?这也是 BSD sed,而不是 GNU sed。或者,如果除了使用 sed 之外还有其他选择,我很想知道该怎么做。
代码:
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}
变量在'...'
内部没有展开。
将单引号更改为双引号。
另一方面,
双引号内的 \
将被解释为转义其后的换行符,
但在这种情况下,对于 sed
的 i
命令,您需要它是文字 \
。
在双引号内,您需要将其写为 \
.
放在一起,这样写:
sed -i '' "3i\
There are a total of ${ALOLANCOUNT} Pokemon in Alola, and you have ${HAVECOUNTER}, and need ${ALOLANNEEDCOUNTER}" $LOGFILE
正如@EdMorton指出的那样,使用单引号会更健壮, 并根据需要中断它以仅双引号使用变量的特定部分,如下所示:
sed -i '' '3i\
There are a total of '"${ALOLANCOUNT}"' Pokemon in Alola, and you have '"${HAVECOUNTER}"', and need '"${ALOLANNEEDCOUNTER}" $LOGFILE
这个更健壮,
因为这样你就不需要扫描整个字符串,如果有可能需要转义的东西,比如我第一个提案中的\
。