【问题标题】:How to find a string and append a (unsafe) text?如何查找字符串并附加(不安全)文本?
【发布时间】:2018-12-16 00:34:00
【问题描述】:

我正在尝试制作一个 autoconf 脚本以在 Makefile 中的变量之后附加文本(例如 $(CFLAGS) -> $(CFLAGS) -Inside)。 sed 不起作用,因为我的字符串可能有“/”和其他不受控制的字符。

目标只是,在每次匹配 A 之后,附加文本 B 而不对其进行任何处理。

我试过sed -e "s/\$(CFLAGS)/& {r put.CFLAGS}/g",其中put.CFLAGS包含要附加的内容,但它直接附加{r put.CFLAGS}而不读取文件。

我该怎么做?

【问题讨论】:

  • 这看起来像the XY problem。你可以这样做,但几乎可以肯定有更好的方法。也许添加一行(“CFLAGS += -Inside”)或让你的makefile(s)include参数文件。

标签: sed sh


【解决方案1】:

夜晚给了很好的提示。

我已经通过使用转义序列实现了我想要的。 首先,我用转义序列替换不安全的字符,在我的例子中,我使用 sed 's/\//\\\\057/g;s/&/\\\\046/g' 来转换 &->\046 和 /->\057(刚刚得到 \057 和 \046,使用 sed 's/\//\\057/g;s/&/\\046/g')。

然后 printf 会将转义的 char 还原为原始含义。

for i in $MAKEVAR_LIST; do
  SED_ARG="`printf "$RAW" | sed 's/\//\\\\057/g;s/&/\\\\046/g'`"
cat "vache.makoge" | sed -e "s/\$($i)/& $SED_ARG/g" > "veau.makoge"
mv -f "veau.makoge" "vache.makoge"
done

地点:

  • RAW 包含不安全的东西追加
  • MAKEVAR_LIST 附加 RAW 的变量列表
  • vache.makoge最终的Makefile

它很脏,但这对我有用。

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 2021-12-27
    • 2016-07-21
    • 2017-02-18
    • 1970-01-01
    • 2023-01-07
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多