sed: Удалить все из точки после полного доменного имени

Некропостинг, но сегодня я столкнулся с той же проблемой и решил ее. Скорее всего journalctl --user-unit chattyу вас не сработало, потому что вы запускаете его от root. Однако по man journalctl, --user-unitфильтрует записи журнала не только по _SYSTEMD_USER_UNIT=, но и по _UID=, а службы chattyс uid root нет, поэтому записи не найдены.

Вероятно, вы также пытались запустить journalctl --user-unit chattyот своего обычного пользователя, но получили No journal files were found. Это происходит из-за того, что (и Всем пользователям предоставляется доступ к своим приватным за -журналам пользователей из man journalctlздесь может быть запутанным )в 2018 году на моем Debian 9 journalctl все еще не сохраняется по умолчанию(Storage=autoв /etc/systemd/journald.confи /var/log/journal/не существует ), а в не -постоянном режиме journaldне поддерживает разделение журналов, поэтому все журналы оказываются в одном месте в /run/log/journal. ] несмотря на то, что разделение включено по умолчанию --см. SplitModeв man journald.conf. Включение постоянства исправляет это.

TL;DR :включить постоянство, заменив Storage=persistentна /etc/systemd/journald.confи перезагрузив journald с помощью sudo systemctl restart systemd-journald.

Альтернативный поиск с помощьюsudo journalctl _SYSTEMD_USER_UNIT=chatty.service

Более подробная информация находится наhttps://lists.freedesktop.org/archives/systemd-devel/2016-October/037554.html

3
16.03.2020, 20:36
4 ответа

sed по умолчанию использует базовые регулярные выражения POSIX (BRE ). \sпредставляет собой PCRE (Perl -совместимое регулярное выражение ), которое эквивалентно BRE [[:blank:]](, я думаю, соответствует пробелам и табуляциям или, возможно, [[:space:]]соответствует большему набору пробельных символов ). Модификатор +является расширенным регулярным выражением POSIX (ERE ), который эквивалентен модификатору \{1,\}как BRE.

Так что попробуй

sed 's/\.[[:blank:]].*//'

вместо этого. Вы можете заменить [[:blank:]]символом пробела, если вам не нужно сопоставлять вкладки:

sed 's/\..*//'

Обратите внимание, что нет необходимости делать подстановку с флагом g, так как всегда будет только одно совпадение. Кроме того, .+, который вы используете, можно просто заменить на .*вместо .\{1,\}, так как нам все равно, есть ли вообще какие-либо другие символы (, просто удалите их все ).

Связанные:

5
28.04.2021, 23:20

Если вы используете Gnu/Linux или любую другую Gnu, у вас будет Gnu sed. В Gnu sed есть опция -r, которая позволяет это сделать.

Добавить параметр -rдля изменения диалекта регулярного выражения.

напр.

echo "abc.ztx.com. A 132.123.12.44" | sed -r 's/\.\s.+//g'

2
28.04.2021, 23:20

Ваш вопрос конкретно касается sed, но я бы использовал для этого cut.

Если вы можете жить с точкой в ​​конце, то:

$ echo "abc.ztx.com. A 132.123.12.44" | cut -d" " -f1

abc.ztx.com.

Если вы не можете жить с точкой в ​​конце, тогда:

$ echo "abc.ztx.com. A 132.123.12.44" | cut -d" " -f1 | rev | cut -d. -f2- | rev

abc.ztx.com

или:

$ echo "abc.ztx.com. A 132.123.12.44" | cut -d" " -f1 | sed -e "s/\.$//"

abc.ztx.com
0
28.04.2021, 23:20

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

echo "abc.ztx.com. A 132.123.12.44" | awk -F '\\. ' '{print $1}'

abc.ztx.com
0
28.04.2021, 23:20

Теги

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