【问题标题】:Regular expression replace with single quote in sed linux在sed linux中用单引号替换正则表达式
【发布时间】:2014-04-10 02:20:05
【问题描述】:

我尝试使用正则表达式为单词添加单引号,注意表达式中是否有单引号、双引号或无引号。我有这个

find . -type f -print0 | xargs -0 sed -i "s/{% url \([^\' >][^\" >][^ >]*\)/{% url \'\1\'/g"

例子

{% url something foo bar %}
{% url "something" foo bar %}
{% url 'something' foo bar %}

应该替换为

{% url 'something' foo bar %}

万一

{% url "something.else" foo bar %}

它变成了

{% url '"something.else"' foo bar %}

单引号不能在单引号中转义,双引号/双引号也一样,不是吗?我该怎么做?正则表达式很棒,但也很困难。谢谢!!

起源是 Django 1.5 中的 url 问题

"Django release 1.5: 'url' requires a non-empty first argument. The syntax changed in Django 1.5"

我找到了更改为双引号 here 的答案。

但是单引号也会出现同样的问题,将'word'替换为“'word'”。

【问题讨论】:

  • 要引起对您的问题的充分关注,请考虑正确格式化您的帖子。
  • 对不起,我以为它已经解释清楚并格式化了。我不明白你的格式是什么,这是我的第一个问题,但始终是一个参考网站,也会说西班牙语,所以如果有拼写错误,我也借此机会道歉;)

标签: django bash sed


【解决方案1】:

以下可能对您有用:

sed -r "s/{% url ['\"]?([^ '\"]*)['\"]?/{% url '\1'/g"

对于输入:

{% url something foo bar %}
{% url "something" foo bar %}
{% url 'something' foo bar %}
{% url "something.else" foo bar %}

它会产生:

{% url 'something' foo bar %}
{% url 'something' foo bar %}
{% url 'something' foo bar %}
{% url 'something.else' foo bar %}

【讨论】:

  • +1 用于简单高效的代码。只是一个小信息,这不允许像"don't work" 这样的 2 个双引号(或反引号)内的简单引号。使用 3 秒// 连续求解,逐个求解或使用 foo bar %}“模式”完成。
  • 谢谢,但这对我不起作用。 sed 命令看起来很强大但是太难了。它给了我无效的参考 -i 和 -r 的无效表达式。另外我想查看目录中的所有文件并更改行,所以我需要 find 。 -type f -print0 | xargs -0 sed -i 我理解似乎在转义单引号时仍然存在同样的问题。使用我发布的命令解决它,因为没有双引号,但将来我需要再次使用它,幸运的是有单引号或双引号,但不是两者的混合。显然我仍然不明白正则表达式是如何工作的
猜你喜欢
  • 2021-06-12
  • 1970-01-01
  • 2021-12-31
  • 2018-08-22
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多