2017-04-24 58 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噢,这是真的。早上好。 –

相关问题