Shell 在$';中展开变量'-引用字符串

Shell 在$';中展开变量'-引用字符串,shell,unix,echo,vi,Shell,Unix,Echo,Vi,我试图在一个特定的行之后立即附加一行 echo $'oSAMPLEINSERT\E:x\n' |vi +/"$search_string" config.txt 我可以使用变量(例如$SampleIns)而不是硬编码字符串“SAMPLEINSERT”吗。有人可以帮助< < /p> < p>您可以在字符串中间引用上下文。(您的代码实际上已经在执行此操作:+/“$search\u string”在无引号的上下文中展开+/部分,在双引号的上下文中展开$search\u string) 将包含变量的

我试图在一个特定的行之后立即附加一行

echo $'oSAMPLEINSERT\E:x\n' |vi +/"$search_string" config.txt 

我可以使用变量(例如$SampleIns)而不是硬编码字符串“SAMPLEINSERT”吗。有人可以帮助< < /p> < p>您可以在字符串中间引用上下文。(您的代码实际上已经在执行此操作:
+/“$search\u string”
在无引号的上下文中展开
+/
部分,在双引号的上下文中展开
$search\u string

将包含变量的部分放在双引号内,将需要C样式反斜杠转义处理的部分放在
$'
内,如下所示:

echo "o${SampleIns}"$'\E:x\n'
如果
SampleIns
包含反斜杠序列,请先使用
printf%b
将其替换为引用的文字值:

printf -v SampleInsLiteral '%b' "$SampleIns"
echo "o${SampleInsLiteral}"$'\E:x\n'

可以更改字符串中间的引用上下文。(您的代码实际上已经在执行此操作:

+/“$search\u string”
在无引号的上下文中展开
+/
部分,在双引号的上下文中展开
$search\u string

将包含变量的部分放在双引号内,将需要C样式反斜杠转义处理的部分放在
$'
内,如下所示:

echo "o${SampleIns}"$'\E:x\n'
如果
SampleIns
包含反斜杠序列,请先使用
printf%b
将其替换为引用的文字值:

printf -v SampleInsLiteral '%b' "$SampleIns"
echo "o${SampleInsLiteral}"$'\E:x\n'

ed
可能更适合这样的工作。唯一的假设是,
$searchstring
不包含未转义的
/

# Make sure the search value is quoted for ed.
# That means verifying that ORACLE_HOME is similarly
# escaped. E.g. ORACLE_HOME='\/usr\/foo\/bar'
searchstring="LoadModule rewrite_module \"${ORACLE_HOME}\/ohs\/modules\/mod_rewrite.so\""
ed config.txt <<EOF
/$searchstring/a
SAMPLEINSERT
.
w
EOF
#确保为ed引用了搜索值。
#这意味着要验证ORACLE_HOME是否与此类似
#逃脱了。例如,ORACLE_HOME='\/usr\/foo\/bar'
searchstring=“LoadModule rewrite\u module\”${ORACLE\u HOME}\/ohs\/modules\/modules\/module\u rewrite.so\”

ed config.txt
ed
可能更适合这样的工作。唯一的假设是,
$searchstring
不包含未转义的
/

# Make sure the search value is quoted for ed.
# That means verifying that ORACLE_HOME is similarly
# escaped. E.g. ORACLE_HOME='\/usr\/foo\/bar'
searchstring="LoadModule rewrite_module \"${ORACLE_HOME}\/ohs\/modules\/mod_rewrite.so\""
ed config.txt <<EOF
/$searchstring/a
SAMPLEINSERT
.
w
EOF
#确保为ed引用了搜索值。
#这意味着要验证ORACLE_HOME是否与此类似
#逃脱了。例如,ORACLE_HOME='\/usr\/foo\/bar'
searchstring=“LoadModule rewrite\u module\”${ORACLE\u HOME}\/ohs\/modules\/modules\/module\u rewrite.so\”

ed config.txt让我给你一个搜索字符串示例“LoadModule rewrite_module”${ORACLE_HOME}/ohs/modules/modules/mod_rewrite。因此“我希望有一个除vi以外的解决方案…vi似乎有点脆弱”让我给你一个搜索字符串示例“LoadModule rewrite_module”${ORACLE_HOME}/ohs/modules/mod_rewrite。所以“我希望有一个除vi之外的解决方案……vi看起来有点脆弱