2008-09-08 19 views

Trả lời

29

Bạn có thể sử dụng cut command để có được tại mỗi 3 'lĩnh vực', ví dụ:

$ echo "system-source-yyyymmdd.dat" | cut -d'-' -f2 
source 

"-d" quy định các dấu phân cách, "-f" xác định số lượng của lĩnh vực này đòi hỏi bạn

+0

Tôi tò mò tại sao bạn thêm dấu nhắC#. Thông thường, dấu nhắc đó cho biết root hoặc superuser. Nói chung, tôi nghĩ rằng những thứ như thử lệnh ** cut ** sẽ được thực hiện tốt hơn với tư cách người dùng thông thường. Tôi đã sử dụng dấu nhắc $. –

+0

Ồ, vâng - điểm tốt. Tôi phải thừa nhận, tôi đã đăng nhập với tư cách là người chủ tại thời điểm đó và đơn giản là đi theo nó - một thói quen xấu, tôi biết. Có nói rằng, tôi nghĩ rằng echo và cắt là hai trong số các lệnh ít hại nhất :) Nhưng, vì lợi ích của sự hoàn chỉnh, tôi chắc chắn sẽ cập nhật các ví dụ ngay lập tức. Chúc mừng. –

+0

làm thế nào tôi có thể gán đầu ra cho một biến? nếu tôi làm 'var =" system-source-yyyymmdd.dat "| cut -d'- '-f2' không hoạt động. – EsseTi

7

Sử dụng lệnh cut.

ví dụ:

echo "system-source-yyyymmdd.dat" | cut -f1 -d'-' 

sẽ trích xuất bit đầu tiên.

Thay đổi giá trị của thông số -f để nhận các phần thích hợp.

Dưới đây là hướng dẫn về lệnh Cut.

8

Tùy theo nhu cầu của bạn, awk linh hoạt hơn cắt. Một teaser đầu tiên:

# echo "system-source-yyyymmdd.dat" \ 
    |awk -F- '{printf "System: %s\nSource: %s\nYear: %s\nMonth: %s\nDay: %s\n", 
       $1,$2,substr($3,1,4),substr($3,5,2),substr($3,7,2)}' 
System: system 
Source: source 
Year: yyyy 
Month: mm 
Day: dd 

Vấn đề là mô tả awk là 'linh hoạt hơn' chắc chắn là như gọi iPhone là một điện thoại di động tăng cường ;-)

1

phương pháp khác là sử dụng các công cụ phân tích nội bộ của vỏ, mà tránh được chi phí của việc tạo ra các tiến trình con:

 
oIFS=$IFS 
IFS=- 
file="system-source-yyyymmdd.dat" 
set $file 
IFS=$oIFS 
echo "Source is $2" 
8

một tốt đẹp và thanh lịch (trong tâm trí của tôi :-) chỉ sử dụng built-in là để đặt nó vào một mảng

var='system-source-yyyymmdd.dat' 
parts=(${var//-/ }) 

Sau đó, bạn có thể tìm thấy các bộ phận trong mảng ...

echo ${parts[0]} ==> system 
echo ${parts[1]} ==> source 
echo ${parts[2]} ==> yyyymmdd.dat 

Nên biết trước: điều này sẽ không hoạt động nếu tên tập tin chứa các ký tự "lạ" như không gian, hay, trời cấm, dấu ngoặc kép, backquotes. ..