Cách dễ nhất trong shell Bourne để trích xuất chuỗi từ một dòng văn bản?


1

Giả sử tôi đang làm grepvà nó trả về dòng này:

Invalid value (48) on line 3

Làm thế nào tôi có thể dễ dàng kéo giá trị đó 48vào một biến trong vỏ Bourne?


Với các lệnh Bourne Shell "cổ điển" thuần túy, hoặc bạn có thể sử dụng các công cụ bên ngoài? Không có Bash hay bất cứ điều gì gần đây?
slhck

Câu trả lời:


1

Nếu bạn chắc chắn rằng mẫu luôn có giá trị trong cặp dấu ngoặc đơn đầu tiên, thì cắt là người bạn tốt nhất của bạn.

myvar=$(echo 'Invalid value (48) on line 3' | cut -d\( -f2 | cut -d\) -f1)

điều này trích xuất giá trị giữa các parens.


$()không phải là một phần của SVID và do đó không hoàn toàn chỉ là "Bourne Shell". Nó được định nghĩa trong POSIX.
slhck

có, nếu nó thực sự là sh gốc, mặc dù trong hầu hết các bản phân phối / bin / sh của linux chỉ là một liên kết tượng trưng đến / bin / bash. tuy nhiên, backstick sẽ hoạt động, nếu $ () không hoạt động. chỉ cần loại bỏ $ và thay thế () bằng ``.
johnshen64

Yup, chỉ muốn đề cập đến nó cho đầy đủ vì OP dường như rất cụ thể shvà không phải Bash và bạn đồng hành.
slhck

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.