Извлечение строки до первой цифры в Bash

Вы можете выяснить это с помощью

lsof -i TCP:6010

Как root, это покажет всех TCP-слушателей, использующих дисплей X11: 10; измените 6010 на 6011 для отображения: 11 и так далее; или используйте диапазон, например TCP: 6000-6020 .

Вы можете аналогичным образом проверить прослушиватели файловых сокетов, если это тоже проблема для вас (вы получаете сообщение об ошибке только для прослушивателя INET выше, так что это не так - пока). Например, если вы запустите свой Xorg с помощью -nolisten tcp , вы увидите это в результатах lsof /tmp/.X11-unix/*.

Вы можете объединить оба:

lsof -iTCP:6000-6020 /tmp/.X11-unix/*
2
17.11.2016, 19:45
2 ответа

Предпочтительная альтернатива

Мы можем просто изменить запрос rpm, чтобы выводилось только имя.

rpm -qa --queryformat "%{NAME}\n"

Или мы можем сделать это с помощью regex

Не совсем "прямолинейно", но вот sed regex, который должен быть в состоянии сделать это.

sed -e 's/\([^\.]*\).*/\1/;s/-[0-9]*$//' <<< "perl-Text-ParseWords-3.30-1.fc22.i686"

Это должно справиться со всем, кроме случаев, когда в имени пакета есть точка (я даже не думаю, что это допустимо).

Быстрая разбивка

  • s/\([^\.]*\).*/\1/ берет все до первой точки. Таким образом perl-Text-ParseWords-3.30-1.fc22.i686 становится perl-Text-ParseWords-3

  • s/-[0-9]*$//избавляемся от трейлинга - и первой цифры версии. So perl-Text-ParseWords-3 becomes perl-Text-ParseWords.

5
27.01.2020, 21:51

Непосредственно в bash:

a='perl-Text-ParseWords-3.30-1.fc22.i686'
r='(^[^0-9]+)'
[[ $a =~ $r ]]

echo "${BASH_REMATCH[1]%?}"
3
27.01.2020, 21:51

Теги

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