linux - grep 不显示从文件中读取 id 的结果

标签 linux bash shell

我有两个名为 db_name.txt 和 id.txt 的文件

db_name.txt 文件:

111111  Steven
222222  Bob
333333  Marry
444444  July
555555  Venus
666666  Porter
777777  Guerson
888888  Yeti
999999  Piza

https://filedn.com/lErjiEcIItPyfm4zDdHlyIz/db_name.txt

id.txt 文件:

222222
444444
777777

https://filedn.com/lErjiEcIItPyfm4zDdHlyIz/id.txt

我想要这样的结果:

222222 Bob
444444 July
777777 Guerson

我已经创建了 shell 脚本来循环 id.txt 内容和 cat db_name.txt,每行都有 grep 变量 id

#!/bin/bash

while IFS= read -r line
do
    cat db_name.txt | grep "$line"
done < "id.txt"

但是没有结果

最佳答案

尝试:

$ grep -Ff id.txt db_name.txt
222222  Bob
444444  July
777777  Guerson

工作原理:

  • -F 告诉 grep 将模式视为固定文本(无事件正则表达式字符)。

  • -f id.txt 告诉 grep 从文件 id.txt 中读取模式。 id.txt 中的每一行都被视为一个模式,独立于其他行。如果任何一个模式匹配,就会产生输出。

快速修复 DOS 行尾

id.dos 类似于 id.txt 但具有 DOS/Windows 行结尾。因此 grep -Ff id.dos db_name.txt 将不会产生任何输出。作为快速修复,请尝试:

$ grep -Ff <(tr -d '\r' <id.dos) db_name.txt
222222  Bob
444444  July
777777  Guerson

关于linux - grep 不显示从文件中读取 id 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57194650/

相关文章:

linux - 使用 GREP 过滤掉一些输入

linux - 由于 dpkg 被中断,无法在 linux 错误中安装软件

linux - 从特定列获取特定行的值

linux - 路由器上的两个 SSH (Jumphost)

bash - 将 stderr 重定向到控制台和文件

javascript - 使用 ajax 和 php 执行 Linux shell 命令

bash - 递归地为所有文件添加文件扩展名

linux - 从源代码构建 RPM,如何在规范文件中安装构建所需的包

linux - 自动登录 Linux 16.04

Bash:如何从数字中提取数字