подстроки в строках

$ sudo install -o angelo -g apache /dev/null angelo-file

У меня работает на centos 6, установите версию 8.4. Здесь установка «копирует» (, который, как известно, всегда является пустым)/dev/nullфайлом в цель, тем самым создавая ваш пустой файл, в то время как в той же/одной команде устанавливается владелец и группа целевого файла, потому что он запускается от имени пользователя root через sudo.

Подробнее об этом читайте в:man installили install --help. Он может создавать каталоги и устанавливать режимы разрешений в одной/одной команде. Команда install часто используется в инструментах сборки, таких как make-файлы.

Вы также можете использовать параметр -T, поэтому, если target уже существует, но является каталогом, произойдет сбой с ошибкой, а вместо этого не будет создан пустой angelo-file/null.

РЕДАКТИРОВАТЬ :ОП спросил о rsync, да. Начиная с rsync 3.1.2, см. такие параметры, как --chmod, --chown, --usermap, --groupmap. (Для centos 6я могу получить более новую версию rsync из репозитория iUS ).

1
17.11.2020, 20:53
2 ответа

Предполагая, что у вас есть GNU awkв качестве третьего аргумента match(), на ум приходит следующая программа:

awk '/IsComplete=True/{match($0,"ExposureName=([^,]+)",a); print $2,$3,a[1]}' *.log

Это сопоставит все строки, содержащие строку IsComplete=True, и извлечет шаблон «ExposureName=, за которым следуют любые символы, отличные от ,», и поместит последнюю часть (, которая является именем файла ). ] в группе захвата, которая будет храниться в переменной массива a.

Затем будет напечатано второе и третье "слово" (разделенное пробелом -поле ), которые содержат дату и время, а затем содержимое группы захвата из вызова match().

Для вашего примера я получаю

06Nov20 13:48:11.838: foobar.tif

Если вы хотите избавиться от части мс -временной метки, вы можете использовать gensub()для изменения этого поля:

awk '/IsComplete=True/{match($0,"ExposureName=([^,]+)",a); print $2,gensub(/\..*$/,"","1",$3),a[1]}' *.log

Обратите внимание, что нумерация полей ($2,$3)сильно зависит от наличия/отсутствия пробелов, т.к. именно так awkпо умолчанию разбивает строку на поля; поэтому, если формат метки времени когда-либо изменится (, например. к 06 Nov 20), вам нужно будет адаптировать синтаксис в операторе print.

5
18.03.2021, 22:49

Использованиеsed:

sed -E '/IsComplete=True/{
     s/^[^ ]* ([^.]*)\..*ExposureName=([^,]*),.*/\1 \2/;
}' *.log
5
18.03.2021, 22:49

Теги

Похожие вопросы