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因为我倾向于使用它更多的快速工作:-)
但是支架的方法是很多更简洁和适应性,这是很好的知道如何做到这一点.
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)
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)
| 归档时间: |
|
| 查看次数: |
52747 次 |
| 最近记录: |