我想查找以特定字符串开头的文件中的所有行。问题是,我不知道字符串中的内容。该值存储在一个变量中。以特定字符串开头的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噢,这是真的。早上好。 –