grep: регулярний вираз лише для відповідності чому-небудь між дужками


21

Як я співставляю слово лише між дужками

Вхід: this is (test.com)

Бажаний вихід: test.com


1
Ви шукаєте регулярний вислів 'grep' або, наприклад, команду-замінник 'sed' для створення відображеного результату?
rickhg12hs

Відповіді:


28

Ось кілька варіантів, усі з яких друкують потрібний вихід:

  1. Використання grepз -oпрапором (тільки друкувати відповідну частину рядка) та сумісними регулярними виразами Perl ( -P), які можуть виконувати пошук навколо :

    printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
    

    Цей регулярний вираз може потребувати пояснення:

    • (?<=\(): Це позитивний погляд ззаду , загальний формат є, (?<=foo)barі він відповідатиме всім випадкам, що barзнайдені відразу foo. У цьому випадку ми шукаємо вхідні дужки, тому використовуємо \(для того, щоб уникнути цього.

    • (?=\)): Це позитивний підхід і просто відповідає дужці, що закривається.

  2. -oВаріант grepпричин його друкувати тільки збігається частина якої - або лінії, тому ми шукаємо те , що в дужках , а потім видалити їх sed:

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. Проаналізуйте всю справу за допомогою Perl:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. Проаналізуйте всю справу за допомогою sed:

    printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
    

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.