grep: regex chỉ để khớp bất cứ thứ gì giữa dấu ngoặc đơn


21

Làm cách nào để chỉ khớp từ giữa các dấu ngoặc đơn

Đầu vào : this is (test.com)

Đầu ra mong muốn: test.com


1
Bạn đang tìm kiếm một regex 'grep' để khớp, hoặc, ví dụ, lệnh thay thế 'sed' để tạo đầu ra của bạn được hiển thị?
rickhg12hs

Câu trả lời:


28

Dưới đây là một vài tùy chọn, tất cả đều in đầu ra mong muốn:

  1. Sử dụng grepvới các -ocờ (chỉ in phù hợp với một phần của dòng) và Perl biểu thức thông thường tương thích ( -P) có thể làm lookarounds :

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

    Regex đó có thể cần một số giải thích:

    • (?<=\(): Đây là một cái nhìn tích cực , định dạng chung là (?<=foo)barvà sẽ phù hợp với tất cả các trường hợp barđược tìm thấy ngay sau đó foo. Trong trường hợp này, chúng tôi đang tìm kiếm một dấu ngoặc đơn mở, vì vậy chúng tôi sử dụng \(để thoát khỏi nó.

    • (?=\)): Đây là một cái nhìn tích cực và chỉ đơn giản phù hợp với dấu ngoặc đơn đóng.

  2. Các -otùy chọn để grepnguyên nhân nó để chỉ in phần phù hợp của bất kỳ dòng, vì vậy chúng tôi tìm kiếm bất cứ thứ gì trong ngoặc đơn và sau đó xóa chúng với sed:

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. Phân tích toàn bộ điều với Perl:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. Phân tích toàn bộ điều với sed:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.