gpt4 book ai didi

string - 为 sed 替换模式转义字符串

转载 作者:太空宇宙 更新时间:2023-11-04 11:49:37 27 4
gpt4 key购买 nike

在我的 bash 脚本中,我有一个外部(从用户那里收到)字符串,我应该在 sed 模式中使用它。

REPLACE="<funny characters here>"
sed "s/KEYWORD/$REPLACE/g"

如何转义 $REPLACE 字符串,以便 sed 安全地接受它作为文字替换?

注意: KEYWORD 是一个哑子串,没有匹配等。它不是由用户提供的。

最佳答案

警告:这考虑换行。有关更深入的答案,请参阅 this SO-question反而。 (谢谢,Ed Morton 和尼克拉斯彼得)

请注意,转义所有内容不是一个好主意。 Sed 需要对许多字符进行转义以获得它们的特殊含义。例如,如果您对替换字符串中的数字进行转义,它将变成反向引用。

正如 Ben Blank 所说,替换字符串中只有三个字符需要转义(转义自身,正斜杠表示语句结束,& 表示全部替换):

ESCAPED_REPLACE=$(printf '%s\n' "$REPLACE" | sed -e 's/[\/&]/\\&/g')
# Now you can use ESCAPED_REPLACE in the original sed statement
sed "s/KEYWORD/$ESCAPED_REPLACE/g"

如果您需要转义 KEYWORD 字符串,以下是您需要的:

sed -e 's/[]\/$*.^[]/\\&/g'

并且可以被使用:

KEYWORD="The Keyword You Need";
ESCAPED_KEYWORD=$(printf '%s\n' "$KEYWORD" | sed -e 's/[]\/$*.^[]/\\&/g');

# Now you can use it inside the original sed statement to replace text
sed "s/$ESCAPED_KEYWORD/$ESCAPED_REPLACE/g"

请记住,如果您使用 / 以外的字符作为分隔符,则需要将上面表达式中的斜杠替换为您正在使用的字符。请参阅 PeterJCLaw 的评论以获取解释。

已编辑:由于之前没有考虑到一些特殊情况,上述命令已更改多次。查看编辑历史以获取详细信息。

关于string - 为 sed 替换模式转义字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56447482/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com