2016-05-25 108 views
1

所以我想写一个grep,在给定的文件中找到.epl文件名或文件路径。grep为单引号和双引号字符串

我曾尝试follwoing regexs

1部分:正则表达式使用grep -rEco "\/(.+)\.epl|(.+)\.epl" ./index.epl 结果获得

url => 'xyz.epl 
    url => 'xyz.epl 
    url => 'xyz.epl 
    url => "packet/xyz.epl 
    url => "/web/abc/xyz.epl 
    url => qq{/web/abc/xyz.epl 
    url => '/web/abc/def/xyz.epl 
    url => '/web/abc/def/xyz.epl 
    url => 'xyz.epl 
    url => 'xyz.epl 
    $url = "/web/abc/def/xyz.epl 
    var requestURL = "xyz.epl 
    var requestURL = "xyz.epl 
    <a style="float:left;" href="xyz.epl 
    [- Execute('components/xyz.epl 
    Welcome, <a href="xyz.epl 
    [- Execute('components/xyz.epl 
    <a href="xyz.epl 
    [- Execute(`'components/xyz.epl` 

但是我希望它仅匹配以下(含或不含前引号)

'xyz.epl(OR xyz.epl) 
    'xyz.epl 
    'xyz.epl 
    "packet/xyz.epl(OR packet/xyz.epl) 
    "/web/abc/xyz.epl(OR "/web/abc/xyz.epl) 
    /web/abc/xyz.epl 
    '/web/abc/def/xyz.epl 
    '/web/abc/def/xyz.epl 
    'xyz.epl 
    'xyz.epl 
    "/web/abc/def/xyz.epl 
    "xyz.epl 
    "xyz.epl 
    "xyz.epl 
    'components/xyz.epl 
    "xyz.epl 
    'components/xyz.epl 
    "xyz.epl 
    'components/xyz.epl 

要获得所需的我试过grep -rEoc '\/(.+)\.epl|[\"\'](.+)\.epl' 但它给了我一个unmatched '.错误

我删除周围的正则表达式的报价,我得到了 Badly placed()'s.

请帮我实现正确的期望输出。

+0

你能证明你的原始输入数据的样本? – anubhava

+0

如果使用选项-o作为参数它不 '-o 上一个单独的输出--only匹配 仅打印匹配行的匹配的(非空)的部分,与每个这样的部分line.' 不,我很抱歉,我不能因保密限制。我认为所提供的信息是足够的 – AnyaK

回答

1

我找到了答案,我trhough两个独立的来源问题。 其中之一解释为here。 另一种是

set quote='"'; grep -E "\/(.+)\.epl|['${quote}](.+)\.epl" /index.epl 

集合报价的伎俩

0

如何告诉被接受作为文件名的一部分,什么字:

grep -Eo "[0-9a-zA-Z/]*.epl" ./index.epl 
+0

在这种情况下'E'标志是不必要的(尽管它不会造成伤害)。一个更安全的方法是'grep'[0-9a-zA-z /] * [。] epl'index.epl'以确保在epl前确实存在一段时间。但是,如果模式可能是*任何*有效的文件名,这将不起作用,因为几乎任何字符都可以是文件名的一部分。 – user1934428

相关问题