2017-04-24 572 views
5

我想查找以特定字符串開頭的文件中的所有行。問題是,我不知道字符串中的內容。該值存儲在一個變量中。以特定字符串開頭的grep行

天真的解決辦法是以下幾點:

grep "^${my_string}" file.txt; 

因爲如果猛砸變量my_string包含任何正則表達式的特殊字符,grep就會哭,每個人都會有一個糟糕的一天。

你不想做grep哭了,你呢?

回答

5

您應該使用awk而不是grep使用index函數非正則表達式搜索:

awk -v s="$my_string" 'index($0, s) == 1' file 

index($0, s) == 1確保搜索字符串僅在啓動時發現的。

0

你是什麼意思如果Bash的變量my_string包含任何正則表達式的特殊字符,grep就會哭

$ cat file 
crying now 
no cry 
$ var="n.*" 
$ echo "$var" 
n.* 
$ grep "^$var" file 
no cry 

現在@anubhava填鴨式我(謝謝主席先生),使用問題grep作業似乎確實至少需要兩個grep S和因爲你想從字面上grep正則表達式字符,請使用後者-F(或fgrep):

$ cat file 
OMG it’s full of 
*s 
$ var="*" 
$ grep "^.\{"${#var}"\}" file|grep -F "$var" 
*s 

${#var}返回var長度在擊,我們從文件的開頭提取字符的量,以與後者grep進行檢查。

(引自2001

+2

問題是,使用'-F'我們不能強迫'grep'僅在行開始找到比賽。 – anubhava

+1

@anubhava噢,這是真的。早上好。 –

相關問題