2010-03-22 69 views
3

我試圖讀取正則表達式的文件,循環它們並將它們從另一個文件中過濾出來。我非常接近,但我相信我的$ regex var替換存在問題。在bash腳本的awk命令中使用正則表達式

while read regex 
do 
    awk -vRS= '!/$regex/' ORS="\n\n" $tempOne > $tempTwo 
    mv $tempTwo $tempOne 
done < $filterFile 

$ tempOne和$ tempTwo是臨時文件。 $ filterFile是包含正則表達式的文件。

+0

它看起來像你希望這是一個空行,那裏曾經是一個對的awk與你的正則表達式匹配嗎?這就是爲什麼有ORS? – rescdsk 2010-03-22 15:03:17

回答

2

$regex沒有得到擴展,因爲它是單引號。在bash,擴展僅在doublequoted串完成:

foo="bar" 
echo '$foo' # --> $foo 
echo "$foo" # --> bar 

所以,剛剛突破了你的字符串,像這樣:

​​

,它會表現得如您所願。 !不應被評估,因爲這將執行歷史記錄中的最後一條命令。

0

我認爲你有一個報價問題

$ regex=asdf 
$ echo '!/$regex/' 
!/$regex/ 
$ echo "!/$regex/" 
bash: !/$regex/: event not found 
$ echo "\!/$regex/" 
\!/asdf/ 
$ echo '!'"/$regex/" 
!/asdf/ 
2

通過你的shell變量使用-v選項

while read regex 
do 
    awk -vRS= -vregex="$regex" '$0!~regex' ORS="\n\n" $tempOne > $tempTwo 
    mv $tempTwo $tempOne 
done < $filterFile