grep сопоставляет два файла и конвертирует их в нижний регистр
Мне нужен быстрый и эффективный подход к следующей проблеме (я работаю со многими файлами.) Но например:
У меня есть два файла: file2
Hello
Goodbye
Salut
Bonjour
и файл1
Hello, is it Me you're looking for?
Я хотел бы найти любое слово в файле 2, которое существует в файле 2, а затем преобразовать это слово в нижний регистр.
Я могу grep слова в файле, выполнив:
grep -f file2.txt file1.txt
и возвращается
Hello
Так что теперь я хочу преобразовать в
hello
так что окончательный результат
hello, is it Me you're looking for?
Где, если я сопоставлю несколько файлов:
grep -f file2.txt *_infile.txt
Вывод будет сохранен в соответствующих отдельных файлах.
Я знаю, что могу преобразовать в нижний регистр, используя что-то вроде tr, но я знаю, как это сделать только в каждом случае заглавной буквы. Я только хочу преобразовать слова, общие для двух файлов, из прописных в строчные.
Благодарю.
1 ответ
Я бы решил проблему немного по-другому.
Во-первых, я бы отмечал спички в grep. --color=always
работает хорошо, хотя это несколько громоздко и потенциально ненадежно при обнаружении. Тогда я бы поменял отмеченные совпадения на sed
или же perl
:
grep --color=always -F -f file2.txt file1.txt | \
perl -p -e 's/\x1b.*?\[K(.*?)\x1b.*?\[K/\L\1/g'
Загадочный RE сопоставляет escape-последовательность окраски перед совпадением, de-color escape-последовательность сразу после совпадения и фиксирует все промежуточное в группе 1. Затем применяется строчная буква \L
преобразование в плен. Вероятно, GNU sed может сделать то же самое, но, вероятно, Perl более переносим.