Вы можете легко сделать это, используя специальный параметр в bash и упростив ваше регулярное выражение perl. Я могу объяснить их оба немного подробнее:
Специальный параметр Bash / Zsh
См. Справочную страницу для получения дополнительной информации. (https://tiswww.case.edu/php/chet/bash/bashref.html#Special-Parameters)
В bash вы можете получить доступ ко всем аргументам, переданным функции, используя специальный параметр $*
, это позволяет вам легко обрабатывать переменное число параметров. В вашем случае вы хотитенайдите и выделите каждое из переданных значений. Приятной особенностью $*
является то, что он будет разделять параметры по значению, установленному для переменной IFS
.
Multi-Matching RegularВыражение
Вместо того, чтобы дублировать логику сопоставления путем добавления дополнительных правил, вы можете просто использовать условное выражение OR
в своем выражении для поиска нескольких слов в документе. Это делается путем добавления канала (|
) между искомыми словами.
Собрав все это вместе, мы можем использовать функцию, подобную этой, для поддержки поиска нескольких слов в документе.
function highlight() {
IFS='|'
perl -pe "s/$*/\e[1;31;43m$&\e[0m/g"
}
ThisЭто довольно простой пример, и он будет даже работать правильно, если ваша целевая строка содержит пробелы, подобные этому:
highlight "my string"