Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux “$line”和“^$line”之间有什么区别_Linux_Bash_Unix - Fatal编程技术网

Linux “$line”和“^$line”之间有什么区别

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循环:

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反向引用