Tôi có một tên tập tin trong một định dạng như:Làm cách nào để phân tích cú pháp tên tệp trong bash?
system-source-yyyymmdd.dat
Tôi muốn để có thể phân tích ra các bit khác nhau của tên tập tin bằng cách sử dụng "-" như một dấu phân cách.
Tôi có một tên tập tin trong một định dạng như:Làm cách nào để phân tích cú pháp tên tệp trong bash?
system-source-yyyymmdd.dat
Tôi muốn để có thể phân tích ra các bit khác nhau của tên tập tin bằng cách sử dụng "-" như một dấu phân cách.
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
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.
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 ;-)
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"
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. ..
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 $. –
Ồ, 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. –
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