存储一个命令的输出并为另一个命令处理它

存储一个命令的输出并为另一个命令处理它

我正在 Unix 命令行上工作。我有两个文件。我想要cat file1.txtgrep输出file2.txt

文件1.txt

123A
223A
143A
153A
183A
123J
123P

文件2.txt:

123A (TYU)
223A (RUT)
143A (EWRW) 4
153A (TGBW) 89 ()
183A (23) YHYT 
123J ikik 780
123P haja 123
XRQE haja 123
XRQE haja 909

最后 2 行file2.txt不存在于file1.txt

我正在尝试做类似的事情:

head file1.txt | **and ??** grep file2.txt

我尝试使用xargs,$variable来存储它,但 shell 挂起或不起作用。

预期输出:已编辑:

123A (TYU)
223A (RUT)
143A (EWRW) 4
153A (TGBW) 89 ()
183A (23) YHYT 
123J ikik 780
123P haja 123

答案1

我假设您想要搜索file2.txt使用来自file1.txt?的字符串中存在的字符串。

如果是这样,您可以使用grep-f开关来完成此操作。

摘自 grep 的手册页
  -f FILE, --file=FILE

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

所以请尝试以下操作:

$ grep -f file1.txt file2.txt 
123A (TYU)
223A (RUT)
143A (EWRW) 4
153A (TGBW) 89 ()
183A (23) YHYT 
123J ikik 780
123P haja 123

传递 file1.txt 的一部分

另一方面,如果您只想搜索中存在的部分字符串,则file1.txt可以使用流程替代动态生成 的子集并将其file1.txt作为临时文件传递给 的开关。grep-f

例如:
$ grep -f <(head -5 file1.txt) file2.txt 
123A (TYU)
223A (RUT)
143A (EWRW) 4
153A (TGBW) 89 ()
183A (23) YHYT 

这将从 中获取前 5 行,并通过符号file1.txt将它们作为临时文件传递给.<(..)grep

相关内容