Awk удаляют поле только если числовой

Если Вы работаете updatedb каждый раз, когда файл создается..., у Вас будет серьезный ввод-вывод наверху с тех пор updatedb проанализируйте всю свою систему, ища новые файлы/каталоги. Тем не менее Ubuntu может установить несколько инструментов для индексации пользовательских файлов, решения о том, что использовать, ваше дело:

  • Средство отслеживания, только индексирующее, Вам нужна интеграция с другим инструментом для обеспечения результатов поиска.
  • Strigi, nepomuk, и комбинация дельфина.
  • Recoll основан на очень сильной библиотеке поисковой системы Xapian.
  • Гончая ищет содержание документов и связанных метаданных.
  • Namazu является индексацией командной строки и поисковой системой.

Большинство из них включено в репозитории Ubuntu по умолчанию и может быть установлено с помощью Центра программного обеспечения.

3
13.07.2017, 15:41
4 ответа

Вы можете попробовать:

ls /var/log/packages/*SBo| sed 's/-[0-9].*//'
3
27.01.2020, 21:12

Это легко делается с помощью SED :

$ ls /var/log/packages/*SBo | sed -r 's|.*/||; s/-[[:digit:]][[:digit:].]*-.*//'
webcore-fonts
winetricks
wireshark
wxGTK

Объяснение:

  • -R

    Это позволяет расширенные регулярные выражения, которые уменьшают количество необходимых высказаний.

  • S |. * / ||

    Это удаляет каталоги, которые предшествуют имя файла.

  • S / - [[: цифра:]] [[: цифра:].] * -. * //

    Это выглядит номер, окруженный тиреми, и удаляет его и все, что следует. Regex использует [: цифр:] вместо [0-9] , чтобы обеспечить, чтобы он работает во всех локалях и с расширенным набором символов.

на Mac OSX, попробуйте:

ls /var/log/packages/*SBo | sed -E -e 's|.*/||' -e 's/-[[:digit:]][[:digit:].]*-.*//'
2
27.01.2020, 21:12

Вы можете сделать это в оболочке, похожей на бурне таким образом:

for Package in /var/log/packages/*SBo;do
    Package="$(basename $Package)"
    echo "${Package%%-[0-9]*}"
done

Это использует расширение параметров Чтобы удалить из названия пакета все после первого возникновения - , а затем цифра, за которой следует все остальное.

И если ваша локаль имеет цифры, не захваченные [0-9] , [[: цифр:]] , используемый в Ответ John1024 работает здесь тоже. То есть

for Package in /var/log/packages/*SBo;do
    Package="$(basename $Package)"
    echo "${Package%%-[[:digit:]]*}"
done

также работает.

1
27.01.2020, 21:12

Если ваши файлы могут содержать модные символы по именам как пробелы, или просто вы не Как и идея разбивки команды LS , то вы можете использовать Найти вместо этого:

find /var/log/packages -maxdepth 1 -name '*SBo' -exec sh -c 'sed s,.*/,,\;s/-[[:digit:]].*//<<<"$0"' {} \;
1
27.01.2020, 21:12

Теги

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