你如何用sed"调试"正则表达式?

Som*_*DOS 33 regex linux debugging sed

我正在尝试使用正则表达式sed.我用kiki测试了我的正则表达式,这是一个用于测试regexpd的gnome应用程序,它在kiki中运行.

date: 2010-10-29 14:46:33 -0200;  author: 00000000000;  state: Exp;  lines: +5 -2;  commitid: bvEcb00aPyqal6Uu;
Run Code Online (Sandbox Code Playgroud)

我想author: 00000000000;什么都不替换.所以,我创建了正则表达式,当我在kiki中测试它时有效:

author:\s[0-9]{11};
Run Code Online (Sandbox Code Playgroud)

但是当我测试它时不起作用sed.

sed -i "s/author:\s[0-9]{11};//g" /tmp/test_regex.txt
Run Code Online (Sandbox Code Playgroud)

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

pax*_*blo 21

我的版本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'
Run Code Online (Sandbox Code Playgroud)

工作良好.

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

echo 'X author: 00000000000; X' | sed ...
Run Code Online (Sandbox Code Playgroud)

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

  • 用来<space>代替\s,没有解决它.
  • 取而代之的[0-9]{11}是11份副本[0-9],有效.

它几乎必须是其中之一,因为我sed成功之前已经使用了正则表达式的所有其他功能.

但是,事实上,这竟没有狰狞11份工作[0-9],你只需要逃避括号[0-9]\{11\}.我不得不承认我没有试过这个,因为它对倍数工作得很好而且我通常不会过于关注自己的简洁,sed因为我倾向于使用它更多的快速工作:-)

但是支架的方法很多更简洁和适应性,这是很好的知道如何做到这一点.

  • 我试图逃避'{'和'}':sed -i"s/author:\ s [0-9]\{11 \}; // g"/tmp/test_regex.txt.有效.你介意测试吗? (4认同)

ver*_*ude 21

在sed你需要逃避花括号. "s/author:\s[0-9]\{11\};//g"应该管用.

Sed没有调试功能.为了测试你,迭代地简化命令行,直到你得到一些工作,然后重新构建.

命令行输入:

$ echo 'xx a: 00123 b: 5432' | sed -e 's/a:\s[0-9]\{5\}//'
Run Code Online (Sandbox Code Playgroud)

命令行输出:

xx  b: 5432
Run Code Online (Sandbox Code Playgroud)

  • 我找到了你的答案.如果你在代码周围添加反引号,它将不管它(上面的第一行).如果缩进包含四个空格的行,则会对代码块产生相同的效果(底部). (2认同)

Pau*_*ce. 18

有一个sedsed由Aurelio Jargas 调用的Python脚本,它将显示sed脚本的逐步执行.像这样的调试器在字面意思(例如{)与具有特殊含义(例如\{)的情况下不会有太大帮助,特别是对于简单的替换,但是当调试更复杂的脚本时它将有所帮助.

最新的SVN版本.
最新的稳定发布.
免责声明:我是一名小伙伴sedsed.

sedsed示例

另一个由Brian Hiles编写的sed调试器,sd编写为Bourne shell脚本(我没有使用过这个).


Ray*_*Ray 12

您必须使用-r标志来扩展正则表达式:

sed -r 's/author:\s[0-9]{11};//g'
Run Code Online (Sandbox Code Playgroud)

或者你必须逃避{}字符:

sed 's/author:\s[0-9]\{11\};//g'
Run Code Online (Sandbox Code Playgroud)

  • `sed -r` 也是我最喜欢的选项:更清晰地读取括号中的模式,否则许多其他必须转义...... (2认同)