结合这两种正则表达式模式

时间:2016-05-15 02:27:36

标签: regex linux shell sed

我有两个正则表达式值,我一直试图将它们组合成一个单独的语句但是它无法正常工作。我需要能够显示包含注释的行或以空格开头,然后才能显示注释。

即。

$page_name = "workers";
echo ($page_name != "home" ? "home" : null);

我一直在尝试使用|声明然而它没有用。

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

由于

4 个答案:

答案 0 :(得分:1)

这应涵盖两种情况

/^\s*\/\*.*/

答案 1 :(得分: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

答案 2 :(得分:1)

正如其他答案所示,通常可以找到一般的表达式,以匹配原始表达式匹配的所有内容。事实上,这总是可行的,因为你总是可以组合两个这样的表达式:

(regex_1|regex_2|...|regex_n)

(根据您使用的方言,您可能必须使用反斜杠。)但是,sed程序可能包含多个语句,因此您的示例可以简单地重写为:

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

答案 3 :(得分:1)

您可以使用grep:

grep "^ */\*" testfile

^ =行的开头 First *重复该空间0次或更多次 第二颗星被逃脱,所以这是一个真实的。