我试图在特定行
之后立即追加行echo $'oSAMPLEINSERT\E:x\n' |vi +/"$search_string" config.txt
我可以使用变量(例如$ SampleIns)而不是硬编码字符串" SAMPLEINSERT"。有人可以帮忙吗
答案 0 :(得分:3)
您可以在字符串中间更改引用上下文。 (您的代码实际上已经执行了此操作:+/"$search_string"
在未加引号的上下文中展开+/
部分,在双引号上下文中展开$search_string
。
将包含变量的部分放在双引号内,并将需要C样式反斜杠转义处理的部分放在$''
内,如下所示:
echo "o${SampleIns}"$'\E:x\n'
如果SampleIns
包含反斜杠序列,请事先用printf %b
替换它们引用的文字值:
printf -v SampleInsLiteral '%b' "$SampleIns"
echo "o${SampleInsLiteral}"$'\E:x\n'
答案 1 :(得分:1)
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