Вы можете связать несколько команд basi c linux с символом канала |
. В сочетании с тем, что называется подстановкой команд (используя вывод сложной команды для использования в другой команде. Синтаксис: $(your command)
), вы можете достичь того, что вы хотите сделать.
Это то, что я придумал на основании вашего вопроса:
cp filename.log $(grep -E "(version_name=)|(date=)" filename.log | cut -f 2 -d = | tr '\n' '-' | rev | cut -c 2- | rev).log
Итак, здесь я использовал cp
, $()
, grep
, cut
, tr
и, наконец, rev
.
Поскольку вы сказали, что понятия не имеете, с чего начать, позвольте мне рассказать вам об этом oneliner:
cp
- он используется для копирования файла filename.log в новый файл с именем, основанным на значениях version_name
и date
(шаг 2 и выше) - подстановка команд
$()
вся команда между круглыми скобками 'разрешается' до завершения cp Команда в шаге 1. Например, в вашем примере это будет ИМЯ-СЕГОДНЯ. обратите внимание на .log
в конце за пределами круглых скобок, чтобы дать ему правильное расширение файла. Вывод этой команды в вашем примере будет NAME-TODAY.log
grep -E "(version_name=)|(date=)"
grep с флагом регулярного выражения -E
, чтобы иметь возможность делать то, что мы делаем. Соответствует любым строкам , содержащим version_name=
ИЛИ date=
. Ожидаемый результат:
version_name=NAME
date=TODAY
cut -f 2 -d =
, потому что я не заинтересован в
version_name
, но вместо этого в значении, связанном с этим полем, я использую cut, чтобы разбить строку на символе равенства
=
с флагом
-d =
. Затем я выбираю значение за знаком равенства (второе поле) с флагом
-f 2
. Ожидаемый результат:
NAME
TODAY
tr '\n' '-'
, поскольку grep выводит несколько строк, я хочу удалить все новые строки и заменить их на da sh. Ожидаемый результат:
NAME-TODAY-
rev | cut -c 2- | rev
Я группирую их.
rev
переворачивает слово, которое я создал. с
cut -c 2-
я вырезал все символы, начиная со второго символа обратного слова. Это необходимо, потому что я заменил новые строки тире, и это означает, что у меня теперь
NAME-TODAY-
. По сути, это всего лишь дополнительный шаг для удаления последнего da sh. Смотрите ожидаемые результаты каждого шага:
-YADOT-EMAN
YADOT-EMAN
NAME-TODAY
помните, что это значение находится в подстановке команд шага 2, поэтому конечный результат будет:
cp filename.log NAME-TODAY.log