grep для прописных слов

Найдите udev теггер разъема в Системе, соедините клиент (dbus-монитор), который контролирует шину с помощью DBus для сообщений на подключении разъема и разъединениях.

7
07.11.2012, 22:16
3 ответа

На самом деле с -o переключатель, GNU grep возвраты только, чему это соответствовало. Как насчет:

grep -oP "\w*[A-Z]+\w*" yourfile.txt

Обратите внимание, что этот regex распознает слова с прописными буквами где угодно в них, не обязательно начале. Необходимо настроить его для удовлетворения потребностей, если они отличаются.

Как указано ниже, это не могло бы быть самым портативным из решений. Портативная альтернатива в Perl

perl -nE 'say $1  while /(\w*[A-Z]+\w*)/g' yourfile.txt
11
27.01.2020, 20:14
  • 1
    Это распознает слова, которые имеют капитал где угодно в слове, не обязательно вначале. –  bahamat 07.11.2012, 22:55
  • 2
    я знаю об этом. Пример OP не указал прописные буквы в начале; в любом случае, его использованием grep, я надеялся, что он достаточно доволен regex для использования еще одного подстроенного для его потребностей. –  Joseph R. 07.11.2012, 22:59
  • 3
    я не говорил, что, чтобы подразумевать, что Вы были неправы, но как разъяснение для людей, которые не анализируют PCRE с wetware. –  bahamat 08.11.2012, 00:13
  • 4
    Обратите внимание, что эта опция является конкретным GNU и не будет работать над несколькими реализациями grep. Используя sed единственный портативный способ, которым я знаю, как сделать это. –  rahmu 08.11.2012, 00:59
  • 5
    Или, еще более изящно, perl -e 'print "$_\n" for map {m/(\w*[A-Z]+\w*)/g} <>' yourfile.txt –  Joseph R. 08.11.2012, 01:20

Вы могли использовать sed только возвратить строку а не целую строку

sed 's/.*\([A-Z]*\).*/\1/g' <file>

или

sed 's/[a-z]*\| //g' <file>
5
27.01.2020, 20:14
  • 1
    Необходимо добавить, что-n переключается для подавления входа, который будет отражен к выводу. –  Vladislavs Dovgalecs 28.04.2015, 22:40

POSIX Основной стандарт Регулярного выражения (используемый по умолчанию в grep, vim, less, sed, и т.д.) использование \< и \> показать границы слова. Это позволяет букве следовать за пробелом, а также неалфавитно-цифровыми символами как кавычки, тире, знаки "равно", и т.д. Используйте -o опция распечатать каждое соответствие на новой строке, и вуаля:

grep -o '\<[A-Z][a-z]*\>' yourfile.txt

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

grep -o '\<[A-Z][a-z0-9]*[A-Z][a-z0-9]*\>' yourfile.txt
4
27.01.2020, 20:14
  • 1
    Хороший, спасибо за объяснение на \<и \>! –  delh 09.11.2012, 02:45
  • 2
    Нет, \< не находится в спецификации POSIX BREs. Ссылка, которую Вы предоставляете, не к той спецификации, но к некоторой странице справочника некоторой версии GNU grep. –  Stéphane Chazelas 07.02.2014, 18:26

Теги

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