我想查找以特定字符串開頭的文件中的所有行。問題是,我不知道字符串中的內容。該值存儲在一個變量中。以特定字符串開頭的grep行
天真的解決辦法是以下幾點:
grep "^${my_string}" file.txt;
因爲如果猛砸變量my_string
包含任何正則表達式的特殊字符,grep
就會哭,每個人都會有一個糟糕的一天。
你不想做grep
哭了,你呢?
我想查找以特定字符串開頭的文件中的所有行。問題是,我不知道字符串中的內容。該值存儲在一個變量中。以特定字符串開頭的grep行
天真的解決辦法是以下幾點:
grep "^${my_string}" file.txt;
因爲如果猛砸變量my_string
包含任何正則表達式的特殊字符,grep
就會哭,每個人都會有一個糟糕的一天。
你不想做grep
哭了,你呢?
您應該使用awk
而不是grep
使用index
函數非正則表達式搜索:
awk -v s="$my_string" 'index($0, s) == 1' file
index($0, s) == 1
確保搜索字符串僅在啓動時發現的。
你是什麼意思如果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)
問題是,使用'-F'我們不能強迫'grep'僅在行開始找到比賽。 – anubhava
@anubhava噢,這是真的。早上好。 –