Làm thế nào để phân tách chuỗi sau và trước khoảng trắng trong shell script?


Câu trả lời:


30

Ngoài đề xuất của jasonwryan , bạn có thể sử dụng cut:

echo $var | cut -d' ' -f1

Trên đây cutlà các echođầu ra với một dấu phân cách không gian ( -d ' ') và đầu ra trường đầu tiên ( -f1)


nó không làm việc. tôi đã sử dụng nó Nó nói lệnh không tìm thấy.
surbhi

3
@surbhi Điều gì nói lệnh không tìm thấy? cutlà một tiện ích tiêu chuẩn. Kịch bản của bạn có thể có lỗi ở một nơi khác. Nói chung, đừng bao giờ nói rằng nó không hoạt động. Luôn nói chính xác mã bạn đã chạy, chính xác những gì đã xảy ra và sao chép-dán thông báo lỗi.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời này nên được chấp nhận, vì đó là cách trực tiếp và ngắn gọn nhất. Tất nhiên, nó sẽ không hoạt động trong các trường hợp phức tạp hơn ví dụ đã cho.
Dân Nguyễn

9

Một cách gọn gàng để làm điều này là sử dụng một mảng bash để tách một chuỗi trên các khoảng trắng. Bạn có thể khai báo một mảng đơn giản bằng cách sử dụng dấu ngoặc:

var="129 148     181"
vars=( $var )
echo "First  word of var: '${vars[0]}'"
echo "Second word of var: '${vars[1]}'"
echo "Third  word of var: '${vars[2]}'"
echo "Number of words in var: '${#vars[@]}'"

điều này nói rằng lệnh không được tìm thấy
surbhi 19/03/2015

Nó phụ thuộc vào bạn sử dụng bash. Nếu bạn đang sử dụng một vỏ khác, nó có thể không hoạt động. echo $SHELLnên hiển thị: /bin/bashhoặc tương tự.
gogoud

không hoạt động trong zsh; (
TonyH

Điều này không hoạt động trong ZSH zoom="one two three"; declare -a zoomie=( $( echo $zoom | cut -d' ' -f1- ) ); echo ${zoomie[2]};
TonyH
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.