2012-02-28 23 views
3

我有一個使用awk的正則表達式來查找文件行中的任何指定單詞。它看起來像這個awk "/word1/||/word2/||/word3/" filename。作爲替代,我一直試圖指定這樣的詞,如WORDS="word1 word2 word3",然後使用bash字符串替換來形成傳遞給awk的正則表達式。爲什麼使用字符串替代形成正則表達式不起作用?

我試過很多方法做到這一點都無濟於事。 awk只是簡單地轉儲整個文件的內容,或者吐出關於正則表達式的一些抱怨。

這是我有:

#!/bin/bash 

FILE="myfile" 
WORDS="word1 word2 word3" 

# use BASH string substitution to obtain the regex which should look like this: 
# "/word1/||/word2/||/word3/" 

REGEX=\"/${WORDS// //||/}/\" 

awk ${REGEX} $FILE 

我相當肯定它與報價做,我用echo嘗試了各種方法和背部蜱可以得到它權(當迴盪),但實際上嘗試使用它時,它會失敗。

+0

這既是對awk的奇怪使用,又是一種奇怪的正則表達式組合。你應該嘗試獲取'/ a | b | c /'(並使用擴展的'grep') – Mat 2012-02-28 09:42:55

+0

我在cygwin中試過這個:嘗試在正則表達式的特殊字符前添加「\」符號。這個命令適用於我:'awk/\(def \ | abc \)/ abc.txt' - 查找所有具有「def」或「abc」的行 – user1227804 2012-02-28 09:48:27

+0

@Mat。謝謝。搜索結果導致我awk。 – 2012-02-28 09:49:36

回答

3

嘗試更換:

REGEX=\"/${WORDS// //||/}/\" 

有:

REGEX="/${WORDS// //||/}/" 

注意,沒有必要逃避雙引號,因爲他們不是真正的正則表達式的一部分。

+0

謝謝。不知道如何設法*逃脫我。 – 2012-02-28 09:47:51

相關問題