Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
String 使用grep提取文本文件中的字符串_String_Shell_Grep_String Matching - Fatal编程技术网

String 使用grep提取文本文件中的字符串

String 使用grep提取文本文件中的字符串,string,shell,grep,string-matching,String,Shell,Grep,String Matching,我有file.txt,每行一个名称,如下所示: ABCB8 ABCC12 ABCC3 ABCC4 AHR ALDH4A1 ALDH5A1 .... 我想从input.txt文件中对这些文件进行grep 我手动一次做一个 grep "ABCB8" input.txt > output.txt 是否有人可以帮助自动将file.txt中的所有字符串从input.txt grep并写入output.txt for line in `cat text.txt`; do grep $line in

我有file.txt,每行一个名称,如下所示:

ABCB8
ABCC12
ABCC3
ABCC4
AHR
ALDH4A1
ALDH5A1
....
我想从input.txt文件中对这些文件进行grep

我手动一次做一个

grep "ABCB8" input.txt > output.txt
是否有人可以帮助自动将file.txt中的所有字符串从input.txt grep并写入output.txt

for line in `cat text.txt`; do grep $line input.txt >> output.txt; done
text.txt的内容

ABCB8
ABCC12
ABCC3
ABCC4
AHR
ALDH4A1
ALDH5A1
ABCB8
ABCB8XY
ABCC12
编辑

 cat text.txt | while read line; do grep "\<${line}\>" input.txt >> output.txt; done
更安全的解决方案,同时阅读:

cat text.txt | while read line; do grep "$line" input.txt >> output.txt; done
编辑2

 cat text.txt | while read line; do grep "\<${line}\>" input.txt >> output.txt; done
示例
text.txt

ABCB8
ABCC12
ABCC3
ABCC4
AHR
ALDH4A1
ALDH5A1
ABCB8
ABCB8XY
ABCC12
示例
input.txt

ABCB8
ABCC12
ABCC3
ABCC4
AHR
ALDH4A1
ALDH5A1
ABCB8
ABCB8XY
ABCC12
你被雇来做一份工作;我们希望你能做到。
你被雇佣是因为ABCB8你真是太棒了;
我们希望你踢屁股。
ABCB8XY你之所以被录用,是因为你可以承诺遵守合理的期限并完成它;
ABCC12我们希望你也这样做。
你不需要一个中层经理来跟踪你的鼠标点击
如果您不关心行的顺序,那么快速的解决方法是通过
排序| uniq

cat text.txt | while read line; do grep "$line" input.txt >> output.txt; done; cat output.txt | sort | uniq > output2.txt
结果随后出现在
output.txt

编辑3

 cat text.txt | while read line; do grep "\<${line}\>" input.txt >> output.txt; done
cat text.txt |读取行时;执行grep“\”input.txt>>output.txt;完成

可以吗?

您可以使用中所述的
-f
标志

旗帜
  • -f FILE
    --FILE=FILE
从文件中获取模式,每行一个。空文件 包含零个模式,因此不匹配任何内容。(-f是 由POSIX指定。)

  • -o
    --仅匹配
仅打印匹配行的匹配(非空)部分,使用 每个这样的部件都位于单独的输出线上


for
循环不是用于此的正确工具,请阅读。Plus
grep
已经在输入文件上循环了。@EdouardLopez:我知道,但在这个简单的例子中这并不重要。无论如何,我从来没有在阅读时使用过任何trobles。你传播坏习惯,你
而/for
是无用的,你试图模仿行为或
grep
(循环文件的每一行)将它们传递给…
grep
。请更清楚地说明你的方法:创建第二个包含模式列表的文件,将其用作
grep
的输入。这也很尴尬,因为您的方法所基于的文件是@user1779730正在查找的结果。因此,您的解决方案基于自身(无限循环:S)@EdouardLopez:我认为grep的字符串是
text.txt
中的字符串。正如我所理解的那样,OP需要一个循环。我从
file.txt
中获得了带有突出显示行的
input.txt
文件,尝试不使用
>output.txt
。请注意,
file.txt
包含模式列表,
input.txt
是要查看的文件。