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 grep
với các -o
cờ (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)bar
và 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 -o
tùy chọn để grep
nguyê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