grep;从文件中获取模式,忽略大小写

grep;从文件中获取模式,忽略大小写

我对 Unix 很不熟悉,我试图了解如何使用grep存储在名为 searchlist.txt 的文本文件中的模式来执行文本文件列表。该文本文件是换行符分隔的名称列表,如下所示:

“华盛顿,玛莎”

“亚当斯,简”

我需要在一些非常大的文本文件中搜索这些名称。我还需要忽略大小写。我想出了grep -i -f searchlist.txt *.txt,但我得到的唯一输出如下所示:

“亚当斯,简”:“华盛顿,玛莎”

我确信这些名称位于文本文件中的某个位置。我想知道是否有一些特定的方式需要格式化searchlist.txt?我需要通过某种方式在命令中指定该列表由换行符分隔吗?

答案1

如果您有一个名为“needles”的文件,其中包含以下内容:

washington, martha
adams, jane

还有一个名为“haystack”的文件,其中包含以下内容:

blah blah blah washington, martha blah
all work and no play
makes adams, jane a dull
girl

您应该能够使用grep -i -f needles haystack.

但是,如果“针”包含:

"washington, martha"
"adams, jane"

您将需要使用grep -i -f <(sed 's/"//g' needles) haystack来去掉名称中的双引号。除非您只想搜索引用的名称。

当然,这对于“干草堆”的情况不起作用,例如

And on that day she changed her name to adams,
jane.

如果您列表中的某个人受到《艺术家以前被称为艺术家以前被称为王子》的启发,并决定在他们的真实姓名中添加双引号,您可以使该名称更sed明确一点,并且仅删除开头和结尾的引号每行与grep -i -f <(sed 's/^"//;s/"$//' needles) haystack.

相关内容