Почему sed делает больше, чем я просил?

Очевидно, это не доказывает, что это так для всех версий Autofs, но мне удалось найти руководство от Oracle ( Поведение Autofs по умолчанию с службами имен ), которое содержит следующее изображение.

How Autofs Uses the Name Service

Это единственная ссылка, которую я могу найти, которая связывает 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.

-1
31.07.2018, 17:26
2 ответа

Символ .является метасимволом . Это означает, что он имеет особое значение. .означает «соответствовать любой отдельной букве или символу». Вы хотите сопоставлять только буквальные .символы.

Если вы измените .на \., вы получите правильный вывод.

Пример:

sed -i -e "s/..\///" -e "s/type_properties\///" testfile

становится:

sed -i -e "s/\.\.\///" -e "s/type_properties\///" testfile
3
28.01.2020, 05:06

Во-первых, не используйте sed -iпри тестировании. Сначала запустите без -iи проверьте результат. Когда вы знаете, что это выглядит правильно , затем добавьте -i, чтобы зафиксировать изменение в файле в месте -.

Причина, по которой sedделает больше, чем от него требуется, заключается в том, что комментарий в функции main()соответствует первому из ваших двух выражений,..\/(два символа и косая черта ).

Если вы хотите применить изменения только к строкам, начинающимся с #include, вы можете использовать

sed -e '/^#include/{s%\.\./%%; s%type_properties/%%;}' file.c

Здесь две замены выполняются только в строках, начинающихся со строки #include. Я также правильно экранировал две точки в первом выражении, чтобы они соответствовали точкам, а не «любому символу». Поскольку текст, который мы сопоставляем, содержит косые черты, я также решил использовать альтернативный разделитель %в командах s.

2
28.01.2020, 05:06

Теги

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