【问题标题】:Recursively replace django template tag with sed用 sed 递归替换 django 模板标签
【发布时间】:2011-12-22 08:51:21
【问题描述】:

我在我的 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 命令之后。它在所有表达式之前。

【问题讨论】:

  • 您是否尝试过使用管道而不是 -exec 来简化此操作?我不是findsed 专家,但我会让sed 处理一个文件,然后使用管道传递其余文件。

标签: regex django bash sed find


【解决方案1】:

试试:

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

有一些假设:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-30
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 2017-12-12
      • 2013-05-04
      相关资源
      最近更新 更多