2016-05-15 153 views
0

我有两个正则表达式值,我试图合并成一个语句,但它不能正常工作。我需要能够显示其中有注释的行,或者以空格开始,然后发表评论。结合这两个正则表达式

即。

/* comment 

     /* comment 

sed -n "/\(^[/*]\).*\([*/]$\)/ p" testfile 

sed -n "/^\s/ p" testfile 

我一直在尝试使用|声明,但它不起作用。

是否有可能将它们合并为一个或我需要单独运行它们。

感谢

+0

你想在C程序或其他东西中找到评论吗?您的问题包括简洁,可测试的样本输入和预期输出。包括很难正确的情况,例如'/ *'出现在字符串中。 –

回答

1

应涵盖这两种情况下

/^\s*\/\*.*/ 
+1

或'/^\ s * \/\ * /',最后的'。*'总是会匹配。 –

+0

是的,但如果用于更换,还必须捕获其余部分。 – karakfa

+0

绝对 - 我的评论仅适用于地址中的使用。 –

1

你可以试试:

/^[ ]*(\/\*.*)$/ 

正则表达式上面会匹配任何意见的线条,可以用空格开始,并将该行捕获到一个组中。检查Regex Demo


正则表达式说明

/^[ ]*(\/\*.*)$/ 

    ^assert position at start of a line 
    [ ]* match a single character present in the list below 
     Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy] 
     the literal character 
    1st Capturing group (\/\*.*) 
     \/ matches the character/literally 
     \* matches the character * literally 
     .* matches any character (except newline) 
      Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy] 
    $ assert position at end of a line 
1

至于其他的答案说明,它往往可能找到一个正则表达式一般足以满足您的一切原始表达式匹配。事实上,这始终是可能的,因为你总是可以将两个表达式是这样的:(根据您使用的话,你可能需要使用反斜杠)

(regex_1|regex_2|...|regex_n) 

然而,sed程序可能包括若干语句,所以你的例子可以简单地改写为:

sed -n "/\(^[/*]\).*\([*/]$\)/p /^\s/p" testfile 
1

您可以使用grep:

grep "^ */\*" testfile 

^=行 一开始* I s重复空间0次或更多次 第二颗星逃脱,所以这是一个真正的。