Как удалить все символы в каждой строке текстового файла, начинающейся с определенной строки?

У меня была точно такая же проблема после do-release-upgradeв Ubuntu 18.04.1 LTS. Все акции, которые благополучно монтировались до этого, заканчивались этим уродливым

mount error: could not resolve address for server.domain.local: Unknown error

nslookupразрешал правильно, syslogи straceничего не показывали.

В конце концов, проблема заключалась в домене .localвместе с изменением (, возможно, во время обновления выпуска )в /etc/nsswitch.conf, ведь демон mDNS Avahi/Bonjour mdns4_minimalбыл помещен перед поиском DNS.

Таким образом, проблема была решена после того, как я изменил порядок с

hosts:          files mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns 

-

hosts:          files dns mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return]

Я не могу вспомнить все полезные ссылки, но эта действительно помогла:https://askubuntu.com/a/853284/810573

-2
26.06.2021, 02:23
1 ответ

Предполагая, что ввод является допустимым текстом в локали пользователя, вы можете:

sed 's/of.*//' < input

Это заменяет ofи любое количество(*)из символов (.), следующих за ним (, поэтому остановится на первом байте, который не является частью допустимого символа в локали в большинстве sedреализации¹ )с пустой строкой.

Если вы не можете гарантировать, что кодировка ввода соответствует языковому стандарту пользователя и что это не одна из тех кодировок символов, где некоторые символы, отличные от o, имеют кодировку, оканчивающуюся на кодировку o(, например BIG5², BIG5 -HKSCS, GBK, GB18030 ), можно было сделать:

LC_ALL=C sed 's/of.*//' < input

В качестве примера проблемы с текстовым вводом, отличным от -, или с вводом, закодированным с помощью шарма, отличного от локали, и с реализацией GNUsed:

$ locale charmap
UTF-8
$ printf 'Point of St\351phane\n' | sed 's/of.*//'
Point �phane
$ printf 'Point of St\351phane\n' | LC_ALL=C sed 's/of.*//'
Point 

(здесь с Stéphane, закодированным в латинском -1 или латинском -0, который обрабатывается sed, работающим в локали с кодировкой UTF -8, где 0xe9 (0351 )сама по себе не может быть частью действительного символа ).

В качестве примера проблемы с кодировками символов, такими как BIG5 -HKSCS:

$ echo trèfle of concern | iconv -t BIG5-HKSCS | LC_ALL=C sed 's/of.*//'
tr�
$ echo trèfle of convern | iconv -t BIG5-HKSCS | LC_ALL=zh_HK.big5hkscs sed 's/of.*//' | iconv -f BIG5-HKSCS
trèfle

Так как символ U+00E8 èкодируется как 0x88 0x6f, 0x6f также является кодировкой o. Вам нужно sedзапустить в локали, которая использует эту карту символов для правильного декодирования этих символов.


¹ некоторые sedреализации также могут просто завершиться ошибкой, из-за которой ввод не может быть декодирован в этих случаях

² Компания Acer, которую вы упомянули, была одной из тех больших пятерок, которые изобрели эту кодировку.

3
28.07.2021, 11:22

Теги

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