Неожиданное поведение -места sed

libmaodbc.so был статически связан с libmariadb.so.3. Теперь я динамически связал libmariadb.so.3, и это сработало.

Понятия не имею, была ли связана плохая/несоответствующая библиотека или какие-то другие настройки для связывания были неправильными (возможно, что-то не так в CMakeLists.txt? ). Так что я до сих пор не понимаю первопричину. Но симптом фиксируется.

1
23.03.2021, 21:52
1 ответ

Параметр -iGNU sed принимает необязательный аргумент, который представляет собой суффикс, используемый для резервного копирования. Итак, sed -iE … datfileзаставляет старую версию файла сохраняться как datfileE. Это не соответствует тому, что вы ожидаете, поскольку вы не передаете параметр -E, поэтому регулярное выражение анализируется как BRE, а не как ERE.

Исправление заключается в передаче параметров по отдельности:sed -i -E …или sed -E -i ….(-Eiтакже сработает, если вы ненавидите следующего человека, который будет читать ваш код.)

В качестве альтернативы можно передать суффикс резервной копии (sed -E -i.bak …), который позволит вашему сценарию работать как с sed FreeBSD, так и с sed GNU. Суффикс необходим для BSD sed, потому что его параметр -iимеет обязательный аргумент и должен быть в том же аргументе командной строки, что и параметр (без пробела между -iи .bak), чтобы GNU sed обрабатывал его как необязательный аргумент для -i, а не отдельный аргумент для sed. Это имеет побочный эффект создания файлов резервных копий.

3
28.04.2021, 22:57

Теги

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