2016-04-01 32 views
1

Bir dize kesmek istiyorum ve virgül ilk kez ortaya çıktıktan sonra bir değişkene atamak istiyorum. beklenenBelirtilen bir desen (virgül) sonra bir dize kesme (virgül)

my_string="a,b,c,d,e,f" 

Çıktı:

output="b,c,d,e,f" 

Ben komutunu

output=`echo $my_string | cut -d ',' f2 

Ben sadece b çıktı olarak alıyorum kullanmak

.

+0

[Değişkenlerinizi gösterin] (https://unix.stackexchange.com/questions/171346/security-implications-of-forgetting-to-quote-a-variable-in-bash-posix-shells) - ' echo "$ my_string" | ... ' –

cevap

1

f $, bir
b, c, d, e yankı senin -f2 sonuna çıktı dize kalanını olacak. Parametre genişlemesi yerine cut ile

$ echo "a,b,c,d,e,f,g"|cut -d, -f2- 

b,c,d,e,f,g 
+1

Bunun nedeni,' -f' alanların * aralıklarını * alabilmesi ve aralığın sonunu vermezseniz aralığın son alana kadar devam etmesidir. –

0

Aradığınız yeri işaret eden eksi işaretini (-) eklemelisiniz. '-'

a=`echo $my_string|cut -d "," -f 2-` 

tire ekleme

1

:

$ my_string="a,b,c,d,e,f" 
$ output="${my_string#*,}" 
$ echo "$output" 
b,c,d,e,f 

${my_string#*,} (Bash manual bakınız) "ve my_string ilk virgül dahil olmak her şeyi kaldırın" anlamına gelir.