用sed递归替换django模板标签

时间:2011-11-04 20:51:59

标签: regex django bash sed find

我在django应用程序中重命名了一些东西,我想以递归方式搜索并替换所有模板中的标记。我尝试使用find和sed这样做。

find . -name *.html -exec sed -i 's/\{\{\s*oldtag\s*\}\}/{{ newtag }}/g' {} \;

我收到此错误。

sed: -e expression #1, char 44: Invalid preceding regular expression

好的,所以我尝试了很多不同的东西来尝试让它发挥作用。我尝试了取消和双重逃避花括号。我尝试使用[\ t]而不是\ s。似乎没什么用。某些组合不会出错,但它们也找不到或替换任何内容。更糟糕的是,有时我会遇到其他错误。

find: paths must precede expression: index.html

路径如何在表达式之前? 。是路径,它紧跟在find命令之后。它位于所有表达式之前。

2 个答案:

答案 0 :(得分:1)

尝试:

find . -name '*.html' -exec sed -i 's|{{\s*oldtag\s*}}|{{ newtag }}|g' {} +

有一些假设:

  • 您的 sed 实现可识别 \ s 转义序列和 -i 选项
  • 您的查找实施支持 {} + 语法

答案 1 :(得分:0)

您应该转发'\个字符。这应该有效:

find . -name *.html -exec sed -i \'s/{{\\s*oldtag\\s*}}/{{ newtag }}/g\' {} \;

提示:您可以随时在单词echo之前插入sed,以查看其外观的打印输出(查看已转义的内容)。