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
效果很好,尽管它在检测方面有些麻烦并且可能不可靠。然后我会用 sed
或 perl
:
更改标记的匹配项
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 可能更便携。
我需要一种快速有效的方法来解决以下问题(我正在处理许多文件。)但是例如:
我有两个文件: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
效果很好,尽管它在检测方面有些麻烦并且可能不可靠。然后我会用 sed
或 perl
:
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 可能更便携。