grep 匹配两个文件并转换为小写

grep matches between two files and convert to lower case

我需要一种快速有效的方法来解决以下问题(我正在处理许多文件。)但是例如:

我有两个文件:file2

Hello
Goodbye
Salut
Bonjour

和文件 1

Hello, is it Me you're looking for?

我想在文件 2 中找到文件 2 中存在的任何单词,然后将该单词转换为小写。

我可以通过执行以下操作来 grep 文件中的单词:

grep -f file2.txt file1.txt

和returns

Hello

所以现在我想转换为

hello

所以最终的输出是

hello, is it Me you're looking for?

如果我匹配多个文件:

grep -f file2.txt *_infile.txt

输出将存储在各自单独的输出文件中。

我知道我可以使用 tr 之类的东西将其转换为小写字母,但我只知道如何对大写字母的每个实例执行此操作。我只想将两个文件之间的公共单词从大写转换为小写。

谢谢。

我会以不同的方式解决问题。

首先,我会在 grep 中标记匹配项。 --color=always 效果很好,尽管它在检测方面有些麻烦并且可能不可靠。然后我会用 sedperl:

更改标记的匹配项
grep --color=always -F -f file2.txt file1.txt | \
    perl -p -e  's/\x1b.*?\[K(.*?)\x1b.*?\[K/\L/g'

神秘 RE 在匹配前匹配着色转义序列,在匹配后立即对转义序列进行去色处理,并将介于两者之间的所有内容捕获到组 1 中。然后它将小写 \L 转换应用于捕获。可能 GNU sed 可以做同样的事情,但 perl 可能更便携。