Очевидно, это не доказывает, что это так для всех версий Autofs, но мне удалось найти руководство от Oracle ( Поведение Autofs по умолчанию с службами имен ), которое содержит следующее изображение.
Это единственная ссылка, которую я могу найти, которая связывает Autofs с NSS . Я могу только предположить, что эта функция была продублирована в версии Autofs, отличной от Oracle, но осталась недокументированной.
Думаю, мне действительно следовало сделать это первым. В autofs-5.1.1.tar.gz есть lib / nss_parse.y
. И в CHANGELOG есть много ссылок на NSS, в первую очередь:
14/01/2008 autofs-5.0.3
-----------------------
...
- if there's no "automount" entry in nsswitch.conf use "files" source.
Символ .
является метасимволом . Это означает, что он имеет особое значение. .
означает «соответствовать любой отдельной букве или символу». Вы хотите сопоставлять только буквальные .
символы.
Если вы измените .
на \.
, вы получите правильный вывод.
Пример:
sed -i -e "s/..\///" -e "s/type_properties\///" testfile
становится:
sed -i -e "s/\.\.\///" -e "s/type_properties\///" testfile
Во-первых, не используйте sed -i
при тестировании. Сначала запустите без -i
и проверьте результат. Когда вы знаете, что это выглядит правильно , затем добавьте -i
, чтобы зафиксировать изменение в файле в месте -.
Причина, по которой sed
делает больше, чем от него требуется, заключается в том, что комментарий в функции main()
соответствует первому из ваших двух выражений,..\/
(два символа и косая черта ).
Если вы хотите применить изменения только к строкам, начинающимся с #include
, вы можете использовать
sed -e '/^#include/{s%\.\./%%; s%type_properties/%%;}' file.c
Здесь две замены выполняются только в строках, начинающихся со строки #include
. Я также правильно экранировал две точки в первом выражении, чтобы они соответствовали точкам, а не «любому символу». Поскольку текст, который мы сопоставляем, содержит косые черты, я также решил использовать альтернативный разделитель %
в командах s
.