Ваш паттерн ищет 1532
, но ничего не говорит о том, что последует:
$ printf '1532\n15321\n1532foo\n' | grep -o '1532'
1532
1532
1532
В зависимости от того, что вы хотите сделать, вы можете ограничить свой шаблон, чтобы он совпадал только перед новой строкой:
grep -Pzo '@<TRIPOS>MOLECULE(?:.*\n)*?\K1532\n' filename
Или, если могут быть пробелы после числа перед концом строки:
grep -Pzo '@<TRIPOS>MOLECULE(?:.*\n)*?\K1532\s*\n' filename
В качестве альтернативы, если у вас могут быть другие элементы в одной строке, используйте \b
, чтобы убедиться, что число находится перед границей слова:
grep -Pzo '@<TRIPOS>MOLECULE(?:.*\n)*?\K1532\b' filename
rsync -av --progress -e 'ssh -i ~/.ssh/godaddy5_rsa' $user@$server:${RemotePath}/1112223334_18BEwW4* "${Answers}"
Не заморачивайтесь, вам не нужно включать/исключать, вам нужны только подстановочные знаки.
Вам действительно не нужно даже вычислять неделю, так как вы можете просто иметь каталог, в котором есть все назначения, и rsync просто захватит самое новое, вот так:
rsync -av --progress -e 'ssh -i ~/.ssh/godaddy5_rsa' $user@$server:${RemotePath}/1112223334_18BEwW* "${Answers}"
date +%U
вернет неделю года, поэтому вы можете использовать ее для автоматического создания недели курса, предполагая, что он линейный, увеличивая 1 каждую неделю. Или вы можете создать массив, в котором индексы указывают на номер недели курса, а индексы — на номер недели года. Или, если это линейное отношение, вы просто добавляете/вычитаете что-то к номеру недели года.