bash

2012-04-13 25 views
6

Dosyam şöyle her satırda ilk karakteri yerine:bash

ben 0. içine ilk karakteri "1" değiştirmek istiyor
1 chrX_73833098_73834098 
    1 chrX_73889652_73890652 
    1 chrX_91194501_91195501 
    1 chrX_92000157_92001157 
    1 chrX_92106500_92107500 

çıktı Aranıyor geçerli:

0 chrX_73833098_73834098 
    0 chrX_73889652_73890652 
    0 chrX_91194501_91195501 
    0 chrX_92000157_92001157 
    0 chrX_92106500_92107500 

bunu yapmak için çalışılıyor bununla:

sed 's/^./0/g' file 

Ama çıktısı:

0  1 chrX_73833098_73834098 
0  1 chrX_73889652_73890652 
0  1 chrX_91194501_91195501 
0  1 chrX_92000157_92001157 
0  1 chrX_92106500_92107500 

Bunu düzeltmenin kolay bir yolu olduğuna inanıyorum ama bilmiyorum.

+2

Her satırın başında beyaz boşluklara sahipsiniz. – kev

cevap

12

Her satırın dilenmesinde boşluk karakteri var.

deneyebileceğiniz:

sed 's/^\s*./0/g' file 

\ s - beyaz boşluk karakterleri

maç

çıkışı:

sed 's/^\(\s*\)\(1\)/\10/g' file 

: Eğer boşluk karakterlerini korumak istiyorsanız

0 chrX_73833098_73834098 
0 chrX_73889652_73890652 
0 chrX_91194501_91195501 
0 chrX_92000157_92001157 
0 chrX_92106500_92107500 

Ben Bu yüzden burada değiştirdik. 1

+1

Çizgiyi satırın başlangıcında tutturmanıza gerek yoktur: sadece ilk basamağı değiştiren 'sed 's/[[: digit:]]/0 /' file' kullanın. İlk boşluk olmayan karakteri değiştirmek için, 's/[^ [: space:]]/0 /'. –

3

Bu, bunun anlaşılması kolay bir yol olduğunu düşünüyorum. Dene:

sed 's/1/0/1' file

çıkışı:

söylemek istediğim
1 chrX_73833098_73834098 
1 chrX_73889652_73890652 
1 chrX_91194501_91195501 
1 chrX_92000157_92001157 
1 chrX_92106500_92107500 

olduğunu 'ın/partten/partten/g', son 'g' bir çizgide yer anlamına gelir.
'1', ilk eşleştirilen anlamına gelir, 'g' all anlamına gelir, ayrıca '2g' değerini de kullanabilirsiniz, bu da ikinciden sonuncu anlamına gelir.
Bir deneyin.

+0

Gerçekten böyle bir oydu, daha önce oy verdiğimi fark etmek için buraya tekrar geldim – DomTomCat