Linux “$line”和“^$line”之间有什么区别
有一个while read循环:Linux “$line”和“^$line”之间有什么区别,linux,bash,unix,Linux,Bash,Unix,有一个while read循环: while read line; do grep "^$line" file1 done < target 我应该使用^$line来得到正确的答案。我想知道两者之间的区别是什么 $line和^$line while循环与此无关,是grep命令使^。^字符是正则表达式中的标识符。它匹配行的开头,因此grep$line文件匹配文件中$line为子字符串的任何行,但grep^$line仅匹配以$line开头的行。@sudo\u O对您的问题有正确的答案
while read line; do
grep "^$line" file1
done < target
我应该使用^$line来得到正确的答案。我想知道两者之间的区别是什么
$line和^$line while循环与此无关,是grep命令使^。^字符是正则表达式中的标识符。它匹配行的开头,因此grep$line文件匹配文件中$line为子字符串的任何行,但grep^$line仅匹配以$line开头的行。@sudo\u O对您的问题有正确的答案。但是,您可以完全忽略循环:
grep -f target file1
只需给grep打一个电话,效率就会大大提高。如果您需要线锚:
grep -f <(sed 's/^/^/' target) file1
为什么使用sed的/^/^/'?它在每个file1行的开头插入一个literal^字符,作为grep调用的正则表达式行锚。在sed的///命令中,左侧是一个正则表达式,右侧只是一个字符串,除了&和\1反向引用