我使用以下命令成功找到我的锚点(正则表达式模式)并将其替换为文件(文件路径)内的参数值。
sed -i $"/$ANCHOR/i \\$PARAMVALSEDINS" "$FILEPATH"
我需要的是当我的 Anchor 为 '' (空)时匹配我的 EOF 并在那里进行替换。
所以我想象做这样的事情:
如果 ANCHOR='' 则 ANCHOR='$EOF' 以便 SED 成功找到 EOF 并继续进行替换。
这可以做到吗?除了这个之外找不到任何具体内容:
sed -i -e "\$aPARAMVALSEDINS" "$FILEPATH"
但是,这不涉及ANCHOR变量,如果我的问题无法得到解答,我将实现它。
附言。当然,完全可以使用另一种方法。也许有一种方法可以使用另一个命令来做到这一点,该命令确实有助于正则表达式区域内的正则表达式匹配和 EOF 匹配?例如另一个 -i $"/$ANCHOR/i \$PARAMVALSEDINS" "$FILEPATH" 其中如果 $ANCHOR 可以匹配 EOF
谢谢
答案1
[[ -z $ANCHOR ]] && ANCHOR='$' || ANCHOR="/$ANCHOR/"
sed -i "${ANCHOR}i \\$PARAMVALSEDINS" "$FILEPATH"
答案2
$ ANCHOR=${ANCHOR:+"/$(printf '%s\n' "$ANCHOR" | sed -e 's:[][\/.^$*]:\\&:g')/"}
$ sed -i -e "${ANCHOR:-\$}i \\$PARAMVALSEDINS" "$FILEPATH"
第一步,转义锚变量的内容,使其能够稳健地用作 sed 匹配括号中的表达式。
在下一步中,如果我们发现锚变量为空,我们将在其位置使用文字 $ 符号,然后 sed 将其解释为 EOF。
HTH。
注意:确保 paramvalsedins var 在使用之前同样进行转义。