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
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
Câu trả lời:
Dưới đây là một vài tùy chọn, tất cả đều in đầu ra mong muốn:
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.
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'
Phân tích toàn bộ điều với Perl:
printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
Phân tích toàn bộ điều với sed:
printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
Một cách tiếp cận là sử dụng Biểu thức chính quy tương thích PCRE - Perl với grep:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com