Используя awk
, вы можете сделать следующее:
ovs-ofctl show br-int | awk '/5.tap/ || /5.qvo/'
или
ovs-ofctl show br-int | awk '/5.(tap|qvo)/'
Я мысленно работаю так же, как и вы, но предпочитаю наслаивать grep
команды до конца. Трудно сопротивляться побуждению, но в таких ситуациях вы должны или мысленно помнить, что когда вы хотите начать действовать по списку, исходящему от find |...
, вы должны начать тянуть xargs
. Когда вы дойдете до этого момента, пора переключиться на find <regex> -exec...
.
В вашем сценарии шаблон, который вы могли бы использовать здесь, выглядит примерно так:
$ find. ! -name "*TFLM*" -exec zmv "{}" "TFLM {}" \;
Но это не сработает, судя по комментариям @StephaneChazelas:
Since zmv is a zsh function, it cannot be executed directly by find. Even if one made a standalone script wrapper around zmv, calling it like that as -exec zmv "{}"... wouldn't make much sense (completely defeat the purpose of zmv) and would introduce a command injection vulnerability
Таким образом, у вас остаются более традиционные варианты использования одного из методов, показанных в этом вопросе и ответе U&L под названием:Пакетное переименование файлов .
Или используя zmv
непосредственно для переименования. Поскольку вы используете zsh
и zmv
, скорее всего, вам вообще не понадобится помощь find
.
$ zmv "(^*TFLM*)" "TFLM \$1"
ПРИМЕЧАНИЕ.:Примите мой совет относительно zmv
и zsh
с долей скептицизма. На самом деле я не использую Zsh, обычно я весь день сижу в Bash.
То, что вы делаете, не соответствует тому, как должны работать find
, grep
и zmv
. Прежде всего, вы используете find
для поиска файлов, а затем grep
для шаблона; это не имеет никакого смысла. В команду find
встроено -сопоставление с образцом, например, в GNU find
, начиная с базового -name
и заканчивая -iname
, -path
, -regex
и многими другими. Вы даже можете изменить синтаксис регулярного выражения, если хотите, с помощью -regextype
. Дело не только в том, что вы делаете что-то не быстро или задействовано слишком много команд, что еще хуже, ваша команда подвержена ошибкам, например, если в файле есть место внутри.
Гораздо лучше чистый find
с опцией -exec
, за которой следует внешняя команда, например mv
. При некоторой осторожности это решение может быть очень переносимым между различными системами.
Но, поскольку вы используете zsh
, то он напрашивается на использование всей его красоты, так что просто добавьте опцию -vn
к zmv
и поэкспериментируйте с разными паттернами, скорее всего, вы захотите
zmv -vn '(^(*TFLM*))' 'TFLM $1'
-v
означает подробный и -n
предотвращает выполнение, просто печатает то, что должно быть сделано (это отлично подходит для тестирования ).