2009-10-21 48 views
13

Làm cách nào để thực hiện kết quả regex như được hiển thị bên dưới, nhưng với dấu ngoặc kép xung quanh ("^ This") như trong thế giới thực "This" chuỗi có thể có dấu cách trong đó.Regex khớp một chuỗi với dấu cách (sử dụng dấu ngoặc kép?) Trong câu lệnh if

#!/bin/bash 

text="This is just a test string" 
if [[ "$text" =~ ^This ]]; then 
echo "matched" 

else 
echo "not matched" 
fi 

tôi muốn làm một cái gì đó giống như

if [[ "$text" =~ "^This is" ]]; then 

nhưng điều này không phù hợp.

Trả lời

20

Bạn có thể sử dụng \ trước không gian.

#!/bin/bash 

text="This is just a test string" 
if [[ "$text" =~ ^This\ is\ just ]]; then 
    echo "matched" 
else 
    echo "not matched" 
fi 
+0

+1 này chắc chắn là cách để làm điều đó. Bash regexes được sử dụng với '= ~' nên thường xuyên nhất (luôn luôn?) Được unquoted. –

+0

Thật tuyệt khi nghe. Tôi chưa bao giờ sử dụng bash regex trước đây, tôi chỉ thử nghiệm và thấy rằng \ làm việc. * Trên S.O., nó chính xác cho đến khi được chứng minh là sai! * –

+0

FWIW, điều này đã thay đổi giữa Bash 3.1 và Bash 3.2. Bash 4.0 có cấu hình 'shopt -s/-u compat31' để chuyển đổi giữa các hành vi. – ephemient

-2

Các bạn đã thử:

^[\s]*This 
-1

bạn có thể làm cho mô tả sự cố của mình rõ ràng hơn không?

text="This is just a test string" 
case "$text" in 
    "This is"*) echo "match";; 
esac 

ở trên giả sử bạn muốn khớp "Đây là" chính xác khi bắt đầu dòng.

0

tôi không quản lý để inline biểu hiện như thế này:

if [[ "$text" =~ "^ *This " ]]; then 

nhưng nếu bạn đặt các biểu hiện trong một biến bạn có thể sử dụng cú pháp regex bình thường như thế này:

pat="^ *This " 
if [[ $text =~ $pat ]]; then 

Lưu ý rằng trích dẫn trên $text$pat là unnessesary.

Edit: Một oneliner thuận trong sự phát triển:

pat="^ *This is "; [[ " This is just a test string" =~ $pat ]]; echo $? 
+0

Không có dấu cách ở đầu '$ text' để' $ pat' phải là '"^Điều này "'. Ngoài ra, trích dẫn các biến ở đây không chỉ là không cần thiết, nó sẽ không hoạt động. 1 để hiển thị định dạng biến. –

Các vấn đề liên quan