2014-12-20 101 views
1

我是bash的新手,我想製作一個將單詞翻譯成另一種語言的腳本。我有一個字典文件,其中我有像Rower私人自行車句子。每個句子都有另一行。我嘗試做的是找到一個匹配用grep:如何獲得grep正則表達式匹配後的文本?

if eval 'nohup grep "'$arg1' '$arg2' [A-Za-z]\+" /tmp/dict.txt > /dev/null'; then 
    echo 'found match' 
else 

我得到一個找到匹配響應,但我需要在比賽後的單詞(或字符串)(ARG1是賽艇和ARG2是PTE )。我想要自行車並將其放入腳本變量。

我也遇到了一些我在棧上找到的正則表達式的問題。它看起來像這樣:

sed -n -e 's!.*en.wikipedia.org/wiki/\(.*\)" title.*!\1!p' 

任何人都可以解釋我這個表達式代碼或提供decripting它的架構?

在此先感謝!

回答

2
if eval 'nohup grep "'$arg1' '$arg2' [A-Za-z]\+" /tmp/dict.txt > /dev/null'; then 
    echo 'found match' 
else 

如果你仔細觀察,你的grep的標準輸出發送到/dev/null(即比特桶/無人區)。要查看grep命令的結果,請將> /dev/null更改爲2> /dev/null(它只會將stderr發送到/dev/null一起刪除重定向到/dev/null(例如,除去> /dev/null)。請注意,在這種情況下,您將看到所有grep輸出。

其次,只得到遵循arg1arg2的話,你就必須分配的grep給一個變量的結果和解析,以消除文本高達arg2,或管道,並直接解析它。

sed -n -e 's!.*en.wikipedia.org/wiki/\(.*\)" title.*!\1!p' 

是一個簡單的sed regex其中/已取代!正常分離,以防止在URL中/衝突。它只是說找到字符串en.wikipedia.org/wiki/保存接下來最後" title(大概是URL - 或 - 頁面名稱的最後一部分)之間\(...\)高達然後更換惹只有什麼保存。使用保存的替換部分中的部分表達式稱爲back reference。這是\1完成的。您可以使用更多的一個分組,back reference\2等。

+0

感謝您的回答! – patrykf

+0

當然,很高興我能幫上忙。 –

+0

很好的解釋 – tinySandy