SED изменяются, только запускаются строки и сохраняют конец строки

src/math.h:23:24: error: openssl/bn.h: No such file or directory
src/math.h:24:25: error: openssl/rsa.h: No such file or directory
src/math.h:25:25: error: openssl/sha.h: No such file or directory

Я предполагаю, что Вам не установили OpenSSL или по крайней мере не пакет разработки, который включает заголовки. Если Вы делаете, заголовки не находятся в /usr/include или /usr/local/include, так как это - то, где Лук-шалот смотрит по умолчанию. Можно добавить, что собственные включают путь путем выполнения:

$ make CFLAGS=-I/path/to/openssl

На Debian эти файлы могут быть найдены в libssl-dev пакет, с которым можно установить apt-get или Ваше любимое управление пакетом также.

2
11.02.2014, 18:53
2 ответа

Удалить комментарии из строк, которые имеют IP, запускающийся с 10.4 (это удалит первое #, Я предполагаю, что у Вас никогда не будет больше):

sed -i '/^#10\.4/{s/^#//}' /etc/hosts

Добавить комментарий к тем строкам:

sed -i '/^10\.4/{s/^/#/}' /etc/hosts

Так, почему был Вашим сбой? Вы использовали c\ что означает:

c\
текст

Удалите строки, соответствующие адресу или диапазону адресов, и произведите строки текста, которые следуют за этой командой (каждый, но последнее окончание \, которые удалены из вывода) вместо последней строки (или вместо каждой строки, если никакие адреса не были указаны). Новый цикл запускается после того, как эта команда сделана, так как пространство шаблона будет удалено.

Так, когда Вы работали sed -i '/#10\.4\..*/c\10\.4\..*' /etc/hosts, эта предназначенная "замена #10\.4\..* с литеральной строкой #10\.4\..*". То, что Вы хотели сделать:

sed -i 's/#10\.4\.\(.*\)/10.4.\1/' /etc/hosts`

Вышеупомянутое использование оператор замены (s/from/to/) и получение шаблона, первый шаблон в \( \) может упоминаться как \1, второе как \2 и т.д. Как Вы видите из ответа Michael, это не нужно также, можно просто заменить #10.4 с 10.4. Или, как в моем ответе выше, можно просто удалить # один.

5
27.01.2020, 21:51
  • 1
    Для удаления комментария я был бы консервативен и добавил бы ^ привязка в обоих regexes, в случае, если файл имеет 210.4.5.6 foobar # this is a host –  glenn jackman 10.02.2014, 22:49
  • 2
    Для удаления комментария я был бы консервативен и добавил бы ^ привязка в обоих regexes, в случае, если файл имеет 210.4.5.6 foobar # this is a host ---------121 положительная сторона--------166833----@glennjackman. Это - то, как у меня был он первоначально, но затем хотя из случаев, куда там вели пробелы. Однако, комментарии после IP вероятны, как Вы указываете так отредактированный ответ, спасибо. –  terdon♦ 10.02.2014, 22:52
  • 3
    Фантастический, это все имеет большой смысл. Один вопрос, который я имею, должен первая команда действительно быть sed -i '/^10\.4/{s/^#//}' /etc/hosts? Я думаю, что это, возможно, должно было бы быть sed -i '/^#10\.4/{s/^#//}' /etc/hosts для нахождения строк, которые запускаются с a #. –  Paul Nelson Baker 11.02.2014, 19:47
  • 4
    @SonofLysander да, Вы совершенно правы, который был ошибкой.Исправлено. –  terdon♦ 11.02.2014, 19:48
  • 5
    Cooool, еще раз спасибо за всю Вашу справку. Это сделало изменение моего файла hosts тривиальным :) –  Paul Nelson Baker 11.02.2014, 20:06

Если все, что Вы хотите, должно удалить # от строк, которые запускаются #10.4., можно использовать s команда, которая заменяет соответствие регулярным выражениям данным текстом замены и оставляет остальную часть строки неизменной. Любой из них работает:

$ sed -i 's/^#10\.4\./10.4./' /etc/hosts
$ sed -i -r 's/^#(10\.4\.)/\1/' /etc/hosts
3
27.01.2020, 21:51

Теги

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