cắt chuỗi trên dấu phân cách cuối cùng


14

Tôi có một tên tệp như thế a.b.c.txt, tôi muốn chuỗi này được phân chia thành

string1=a.b.c
string2=txt

Về cơ bản tôi muốn tách tên tệp và phần mở rộng của nó. Tôi đã sử dụng cutnhưng nó chia tách như a,b,ctxt. Tôi muốn cắt chuỗi trên dấu phân cách cuối cùng.

Ai đó có thể giúp gì không?

Câu trả lời:


24
 #For Filename
 echo "a.b.c.txt" | rev | cut -d"." -f2-  | rev
 #For extension
 echo "a.b.c.txt" | rev | cut -d"." -f1  | rev

Vẻ đẹp của mã!
Nam G VU

15

Có nhiều công cụ để làm điều này.

Như bạn đang sử dụng cut:

$ string1="$(cut -d. -f1-3 <<<'a.b.c.txt')"
$ string2="$(cut -d. -f4 <<<'a.b.c.txt')"
$ echo "$string1"
a.b.c
$ echo "$string2"
txt

Tôi đã sử dụng mở rộng tham số (nếu shell hỗ trợ nó):

$ name='a.b.c.txt'
$ string1="${name%.*}"
$ string2="${name##*.}"
$ echo "$string1"
a.b.c
$ echo "$string2"
txt

1
các giải pháp bash là thanh lịch.
törzsmókus

các cắt một không chỉ làm việc với một số cố định của thời gian!
törzsmókus

0
echo "a.b.c.txt" | cut -d. -f1-3

cutlệnh sẽ phân định .và sẽ cung cấp cho bạn 4 yếu tố ( a, b, c, txt). Lệnh trên sẽ in hệ số 1 đến 3 (bao gồm).

Hoặc là:

echo "a.b.c.txt" | cut -d -f-3

Lệnh trên sẽ in hệ số 1 đến 3 (bao gồm).

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.