Vì bạn có một thẻ sed
đây là một câu trả lời sed
:
echo "$word" | sed -e "{ s/^\(.\).*/\1/ ; q }"
Chơi bằng cách chơi dành cho những người thưởng thức những người (tôi làm!):
{
s
: bắt đầu thay một thói quen
/
: Bắt đầu xác định những gì là để được thay thế
^\(.\)
: nắm bắt những nhân vật đầu tiên trong Nhóm 1
.*
:, chắc chắn rằng phần còn lại của dòng sẽ được thay thế các
/
: bắt đầu chỉ định thay thế
\1
: chèn Nhóm 1
/
: Phần còn lại bị loại bỏ ;
q
: Thoát sed
vì vậy nó sẽ không lặp lại khối này cho các dòng khác nếu có bất kỳ.
}
Vâng đó là thú vị! :)
Bạn cũng có thể sử dụng grep
và v.v. nhưng nếu bạn đang ở trong bash
thì ma pháp ${x:0:1}
vẫn là giải pháp tốt hơn.(Tôi đã dành như một giờ cố gắng sử dụng POSIX mở rộng biến để làm điều đó nhưng không thể :(
)
Xin lưu ý rằng không có tùy chọn '-c' trong đầu POSIX:. –
gioele
Điều này sẽ trả lại chữ cái đầu tiên, nhưng nó là một quá mức cần thiết, và giải pháp phụ thuộc vào các tiện ích bên ngoài (đầu). Điều này có thể được thực hiện trong vỏ tinh khiết, đó là sạch hơn. – automatthias
Đây không phải là câu trả lời được chấp nhận, vì những lý do được nêu ra bởi các nhận xét trên. Các câu trả lời thực sự dưới đây - '$ {word: 0: 1}' hoặc '$ {word :: 1}'. – noamtm