2012-11-24 229 views
0

我有麻烦匹配这种模式< =与sed中的正则表达式。我真正需要的是类似于[< | < =]或者或者键入match。我可以将它与*一起使用,但这偶尔会在其余部分产生其他问题。例如线将是:匹配'小于'或'小于或等于'的符号与正则表达式

for (int j = 0 j < nspeC++j) 

for (int j = jmin j <= jmax ++j) 

以下(部分)通过示例的方式的命令。

sed -n '/for (int *\([[:graph:]]\) *= *\([[:graph:]]\) *\1 *</p' filename 

会发现第一个模式,但

sed -n '/for (int *\([[:graph:]]\) *= *\([[:graph:]]\) *\1 *<=/p' filename 

不会找到第二个。

任何帮助,将不胜感激。

+1

怎么样的Unicode字符“ ≤“?这是否被排除在派对之外? – Phrogz

+0

@Progro什么编程语言认为这个有效的源代码? – phant0m

回答

2

字符类只匹配一个字符。 (这意味着|被解释为一个字面管字符,而不是交替)

您需要使用()更换[]

(<|<=)或者:<=?

1

在正则表达式的?使得以前的元件optional 。所以<=?的意思是“给我少于等于,等于你有。”

我不知道,如果在SED进行转义或不?需求,所以尝试这两种方法,并请让我知道/更新这个当你发现:-)

+0

试过了,它确实需要逃跑。然而,<= \?找到<但不是<=。 –

+0

我明白了。 <= \?确实有用,但我在其他地方发生了错误。这是我的完整表达式以供参考:s/for(int * \([[:graph:]] * \)* = * \([[:graph:]] * \)* \ 1 * <= \?* \ ([[:graph:]] * \)* ++ \ 1)/ for xrange(\ 2,\ 3)中的\ 1 –

相关问题