sách gpt4 ăn đã đi

Mẫu biểu thức chính quy để xác định phần mở rộng tệp trong tập lệnh Bash không chính xác để chụp các tệp nén

In lại Tác giả: Walker 123 Thời gian cập nhật: 29-11-2023 09:22:32 32 4
mua khóa gpt4 giày nike

Tôi đã tạo tập lệnh Bash nhỏ này có một tham số (tên tệp) và sẽ phản hồi dựa trên phần mở rộng của tệp:

#!/bin/bash

fileFormat=${1}

nếu [[ ${fileFormat} =~ [Ff][Aa]?[Ss]?[Tt]?[Qq]\.?[[:alnum:]]+$ ]]; thì
echo "đó là tệp FASTQ";
elif [[ ${fileFormat} =~ [Ss][Aa][Mm] ]]; sau đó
echo "đó là tệp SAM";
khác
echo "nó không phải là fasta hay sam";

Đây là cách nó hoạt động:

sh script.sh tên file.sam

Nếu đó là fastq (hoặc FASTQ, hoặc fq, hoặc FQ, hoặc fastq.gz (nén)), tôi muốn tập lệnh cho tôi biết "đây là fastq". Nếu là sam, tôi muốn nó nói với tôi rằng đó là sam, nếu không, tôi muốn nó nói với tôi rằng đó không phải sam hay fastq.

câu hỏi: Khi tôi không tính đến kịch bản .gz (được nén), tập lệnh đã chạy tốt và cho tôi kết quả như mong đợi, nhưng đã xảy ra điều gì đó khi tôi cố gắng thêm phần cuối cùng có tính đến kịch bản này (xem dòng thứ ba , nơi nó nói một phần của .?[[:alnum:]]+ ). Phần này có nghĩa là "Trong tên file, sau phần mở rộng (fastq trong trường hợp này), có thể có dấu chấm theo sau là một số từ".

Đầu vào của tôi là thế này:

sh script.sh filename.fastq.gz

Và nó hoạt động. Nhưng nếu tôi đặt: sh script.sh filename.fastq

Nó nói đây không phải là fastq. Tôi muốn đặt phần cuối cùng là tùy chọn, nhưng nếu tôi thêm dấu "?" ở cuối thì nó không hoạt động. Có ý tưởng gì không? Cảm ơn! Vấn đề của tôi là sửa phần đó để hoạt động cho cả hai trường hợp.

câu trả lời hay nhất

Bạn có thể sử dụng biểu thức chính quy này:

Định dạng tệp = "$1"

nếu [[ $fileFormat =~ [Ff]([Aa][Ss][Tt])?[Qq](\.[[:alnum:]]+)?$ ]]; thì
echo "đó là một tập tin FASTQ"
elif [[ $fileFormat =~ [Ss][Aa][Mm]$ ]]; sau đó
echo "đó là một tập tin SAM"
khác
echo "nó không phải là fasta hay sam"

此处 (\.[[:alnum:]]+)? Tạo nhóm cuối cùngKhông bắt buộc, nghĩa là một dấu chấm theo sau là hơn 1 ký tự chữ và số.

Khi bạn chạy nó:

./script.sh tên tệp.fastq
đó là một tập tin FASTQ

./script.sh fq
đó là một tập tin FASTQ

./script.sh tên tệp.fastq.gz
đó là một tập tin FASTQ

./script.sh tên tệp.sam
đó là một tập tin SAM

./script.sh tên tệp.txt
nó không phải là fasta hay sam

Về việc mẫu biểu thức chính quy để xác định phần mở rộng tệp trong tập lệnh Bash không chính xác để chụp các tệp nén, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/54094620/

32 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress