我对 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
.