regex - 你如何用 sed "debug"一个正则表达式?

我正在尝试通过 sed 使用正则表达式。我已经使用 kiki 测试了我的正则表达式,这是一个用于测试 regexpd 的 gnome 应用程序,它可以在 kiki 中运行。

date: 2010-10-29 14:46:33 -0200;  author: 00000000000;  state: Exp;  lines: +5 -2;  commitid: bvEcb00aPyqal6Uu;

我想将 author: 00000000000; 替换为空。所以,我创建了正则表达式,当我在 kiki 中测试它时它可以工作:

author:\s[0-9]{11};

但是当我在 sed 中测试它时不起作用。

sed -i "s/author:\s[0-9]{11};//g" /tmp/test_regex.txt

我知道正则表达式有不同的实现,这可能是问题所在。我的问题是:我如何至少尝试“调试” sed 发生了什么?为什么它不起作用?

最佳答案

我的 sed 版本不喜欢 {11}少量。处理行:

sed 's/author: [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9];//g'

工作正常。

我调试它的方式正是我在这里所做的。我刚刚构建了一个命令:

echo 'X author: 00000000000; X' | sed ...

并一次删除更高级的正则表达式:

  • 使用 <space>而不是 \s ,没有解决。
  • 替换为 [0-9]{11}带有 11 份 [0-9] ,成功了。

几乎必须成为其中之一,因为我之前使用过您的正则表达式的所有其他功能 sed成功。

但是,事实上,这个在没有可怕的 11 个 [0-9] 副本的情况下实际工作。 ,你只需要转义大括号 [0-9]\{11\} .我不得不承认我没有尝试这样做,因为它适用于倍数,而且我通常不会太在意 sed 中的简洁性。因为我倾向于将它更多地用于快速'n'dirty工作:-)

但是大括号方法更加简洁和适应性强,知道怎么做是件好事。

关于regex - 你如何用 sed "debug"一个正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4052253/

相关文章:

c - 在 C 中检测 64 位编译

linux - 没有换行的cat文件

linux - Unix管道到ls

xml - CHMOD 755 与 750 权限集之间的差异

linux - 获取 Docker 容器名称

linux - 如何在 unix 中解压 tar.bz 文件?

linux - 检查 VT-x 是否已激活而无需在 Linux 中重新启动?

linux - 在 Bash 中从最后到第一个输出文件行

linux - 是否可以在 XTerm 或 Konsole 中使 stdout 和 stderr 输

bash - 即使文件存在且不为空,也总是给出 false