2013-06-20 54 views
0

我希望對擴展正則表達式有所幫助。 我一直在試圖找出卻徒勞無功正則表達式的疑難解答

我有一個文件conflicts.txt它看起來像這樣請注意,只有這個文件的一部分,還有很多線,如這些

Server/core/wildSetting.json 
    Server/core 
    Client/arcade/src/assets 
Client/arcade/src/assets/ 
    Client/arcade/src/assets 
Client/arcade/src/Game/ 

我寫一個shell腳本,通過行雲thorugh此文件行:

if [ -s "$CONFLICTS" ] ; then 
    count=0 
    while read LINE 
    do 
    let count++ 
    echo -e "\n $LINE \n" 
    done < $CONFLICTS 
fi 

上面打印的行的文件行什麼我現在想是具有一定的文字到一些其他的文件中的行重定向因爲我修改了回聲線代碼:

echo -e "\n $LINE \n" | grep -E "Server/game" > newfile.txt 

我的查詢:

正如我們可以看到有表格服務器/核心的多線... 我想寫一個正則表達式,並使用它的grep,其中匹配兩種線

1)線S含有隻有字符串由任意數目的空格

2)包含字符串「資產」的所有行

preceeded和suceeded「服務器/芯」 10

我寫了一個正則表達式相同,但它不工作

這裏我正則表達式:

grep -E '[^' '*Server/core$] | [assets]' 

可以請你告訴我什麼是做它的正確方法嗎?

請注意,「Server/core」之前和之後可以有任意數量的空格,因爲此文件是解析先前文件的結果。

謝謝!

+0

如果沒有問題,並且想要將行與'Server/core'或'assets'匹配,這應該使得:'grep -E「Server/core | assets」file' – fedorqui

+0

@fedoroqui,這將匹配包含服務器/核心並重定向到我的新文件的行。我想匹配包含「唯一」「服務器/核心」的線路 – Riddle

+0

那麼匹配「服務器/核心」和*不是*「資產」?這個問題並不清楚。 – fedorqui

回答

1

基於什麼問in the comments

1)包含字符串「資產線「

$ grep "assets" file 
     Client/arcade/src/assets 
    Client/arcade/src/assets/ 
     Client/arcade/src/assets 

2)只包含sting」服務器/核心「的行先行並且成功了任意數量的空間

$ grep "^[ ]*Server/core[ ]*$" file 
     Server/core 
+0

哎fedorqui,這確實匹配 '服務器/ core' 但它也符合線,如 '服務器/核心/ x' 'Server/core/y' – Riddle

+0

嗯不在我的電腦裏。你測試過了嗎? – fedorqui

+1

我的不好,忘了胡蘿蔔和$標記開始,並完成真棒asnwer fedoroqui謝謝:) – Riddle

1

sed(Stream EDitor)可以完美地解決您的問題。

試試這個命令sed -n '/^ *Server\/core\|assets/p' conflicts.txt。您的grep -E '[^' '*Server/core$] | [assets]'有問題。 方括號中的^省略了括號中包含任何後續字符的所有字符串。

如果要執行就地修改,該-i選項添加到sed命令狀 sed -in '/^ *Server\/core\|assets/p' conflicts.txt

+0

謝謝Summer_More_More_Tea 這是正是我正在尋找:) – Riddle

+0

@Riddle你總是歡迎:)。 –

+1

你的答案似乎暗示'grep'無法做的工作,你必須使用'sed' – doubleDown

0

你的正則表達式只是需要這樣的:

assets|^\s*Server/Core\s*$ 

我覺得awk或者sed會比grep的一個更好的工具 - 你需要躲避正斜槓,如果你使用的其中之一。

+0

Dave它會匹配每一行包含 '服務器/核心' 會給我額外的行比預期:) – Riddle

+0

對不起 - 誤解了您的要求 - 編輯回答匹配。 –