Unix 两个文件之间的grep匹配并转换为小写

Unix 两个文件之间的grep匹配并转换为小写,unix,sed,grep,tr,Unix,Sed,Grep,Tr,我需要一种快速有效的方法来解决以下问题(我正在处理许多文件)。例如: 我有两个文件:file2 Hello Goodbye Salut Bonjour 和文件1 Hello, is it Me you're looking for? 我想找到文件2中存在的任何单词,然后将该单词转换成小写 通过执行以下操作,我可以将文件中的单词变灰: grep -f file2.txt file1.txt 返回 Hello 所以现在我想转换成 hello 所以最终的输出是 hello, is it Me

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

我有两个文件:file2

Hello
Goodbye
Salut
Bonjour
和文件1

Hello, is it Me you're looking for?
我想找到文件2中存在的任何单词,然后将该单词转换成小写

通过执行以下操作,我可以将文件中的单词变灰:

grep -f file2.txt file1.txt
返回

Hello
所以现在我想转换成

hello
所以最终的输出是

hello, is it Me you're looking for?
其中,如果我匹配多个文件:

grep -f file2.txt *_infile.txt
输出将存储在各自单独的输出文件中

我知道我可以使用类似tr的东西转换成小写,但我只知道如何在大写字母的每个实例上这样做。我只想将两个文件之间常用的单词从大写转换为小写


谢谢。

我会用不同的方式解决这个问题

首先,我会在grep中标记匹配项
--color=始终
工作正常,尽管它有点麻烦,而且在检测中可能不可靠。然后我将使用
sed
perl
更改标记的匹配:

grep --color=always -F -f file2.txt file1.txt | \
    perl -p -e  's/\x1b.*?\[K(.*?)\x1b.*?\[K/\L\1/g'

神秘的重新匹配匹配前的着色逃逸序列,在匹配后立即取消着色逃逸序列,并将两者之间的所有内容捕获到组1中。然后将小写的
\L
转换应用于捕获。GNU sed可能也能做到这一点,但perl可能更具可移植性。

谢谢-我尝试了一下,但perl脚本之后的输出并不是原始文件中未大写的单词,而是看起来像原始文本和wingdings的混合体。我认为perl命令是在插入特殊字符,它的
grep--color=always
是在插入特殊字符,用作标记
perl
应该删除它们并转换标记的位置。我已经更新了(假定的)标记序列,但我仍然不确定它是否足够便携。请运行grep--color=always-f file2.txt file1.txt | head-1 | hextump并显示输出。也许,您的系统使用不同的转义序列为终端输出着色,以确保输出正确-我将
U
更改为
L
以转换为小写。非常感谢。