2016-05-25 161 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

相關問題