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

时间:2016-05-19 09:27:13

标签: unix sed grep tr

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

我有两个文件:file2

Hello
Goodbye
Salut
Bonjour

和file1

Hello, is it Me you're looking for?

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

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

grep -f file2.txt file1.txt

并返回

Hello

所以现在我要转换为

hello

以便最终输出

hello, is it Me you're looking for?

如果我匹配多个文件:

grep -f file2.txt *_infile.txt

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

我知道我可以使用类似tr的东西转换为小写,但我只知道如何在大写字母的每个实例上执行此操作。我只想将两个文件中常见的单词从大写转换为小写。

感谢。

1 个答案:

答案 0 :(得分:1)

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

首先,我会在grep中标记匹配。 --color=always效果很好,虽然它有些麻烦且可能在检测中不可靠。然后我会更改标记为sedperl的匹配:

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

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