Как добавить закрывающие теги XML с помощью sed

Хотя у меня никогда не было проблем с другими моими x86 _64 ПК, работающими под управлением Arch Linux, до сих пор это часто происходит с Arch Linux ARM при запуске NetworkManager.

Проблема в том, что вы подключены к Wi-Fi, но не можете проверить связь или использовать Интернет, но вы можете получить доступ ко всем компьютерам в локальной сети и даже использовать программное обеспечение для удаленного доступа к рабочему столу.

Существует высокая вероятность того, что что-то пошло не так, когда ваш ping или ваш браузер пытается разрешить хост. Я могу придумать 3 решения:

Решение 1

Я считаю, что это проблема тысяч систем Raspberry Pi, работающих под управлением Archlinux ARM и использующих NetworkManger.

В моем случае /etc/resolv.conf был неработающей символической ссылкой на ../run/systemd/resolve/stub-resolv.conf.

NetworkManager не может заполнить символическую ссылку, а файл /etc/resolv.conf пуст. Мы должны:

  1. Удалить неработающую символическую ссылку:
# rm /etc/resolv.conf
  1. Создайте файл /etc/NetworkManager/conf.d/dns.confс содержимым:
[main]
dns=none
main.systemd-resolved=false
  1. Перезапустите NetworkManager:
sudo systemctl restart NetworkManager

Это должно решить проблему, если не следовать Решению 2.


Решение 2

Если описанное выше не помогло вам решить проблему, вы можете временно заполнить файл /etc/resolv.conf:

sudo systemctl restart systemd-resolved && sudo systemctl stop systemd-resolved

Причина, по которой это работает, заключается в том, что, возможно, что-то не так с файлом /etc/resolv.conf. Приведенная выше команда должна перезаписать содержимое, но опять же, вы должны посмотреть, что вызывает проблему.


Решение 3

Если вы не можете вернуть свой /etc/resolv.conf,просто создайте новый/etc/resolv.conf(удалите, если существует пустой старый или символическая ссылка )и вставьте код:

search domain.name
nameserver 8.8.8.8
nameserver 1.1.1.1
nameserver 1.0.0.1

Обратите внимание, что в первой строке вы также можете использовать IP-адрес вашего маршрутизатора, например(nameserver 192.168.43.1в моем случае ), что сделает доступными для проверки связи другие системы в той же сети. Не очень хорошая идея генерировать resolv таким образом, но у меня были плохие времена с автоматически сгенерированным NetworkManager -resolv. Systemd -resolvd также генерирует неправильные файлы даже на моем ПК.

Немного странно, здесь я использую основной DNS Google и основной DNS Cloudflare, вы можете использовать 8.8.8.8 с 8.8.4.4 или 1.1.1.1 с 1.0.0.1.


Хотя этот шаг работает, вы можете запретить NetworkManager перезаписывать файл при его перезапуске:

Добавить эту запись в/etc/NetworkManager/NetworkManager.conf

[main]
dns=none
systemd-resolved=false

Они работали для моих установок на Raspberry Pi 3 модели B. Надеюсь, это сработает и для вас.

2
08.09.2021, 13:23
1 ответ

Как обычно, мне нужно включить обязательное предупреждение :Использование наивных инструментов для разбора текста для разбора [XH]TML — плохая идея. Он очень часто дает сбои, неустойчив к любым изменениям ввода и, скорее всего, незаметно сделает что-то, что сломает ваш документ. Вместо этого вы должны всегда пытаться использовать специальный анализатор XML.

Тем не менее, если следующие предположения верны, вы можете использовать приведенное ниже решение:

  1. Ни один из ваших тегов не занимает несколько строк.
  2. Для закрытия всех открывающих тегов <metaи только этих тегов требуется />.
  3. У вас никогда не может быть >внутри тега. На самом деле я недостаточно хорошо знаю спецификации XML, чтобы знать, может ли это произойти, возможно, в рамках name=?

Если вышесказанное верно, попробуйте:

$ sed -E 's|(<meta [^>]*[^/])>|\1/>|' file.xml 
<meta name=Originator content="text/html; charset=iso-8859-6/>
<meta name=ProgId content=Word.Documen/>
<meta name=Generator content="Microsoft Word 15"/>
5
08.09.2021, 14:53

Теги

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