2012-04-13 38 views
6

tập tin của tôi trông như thế này:bash thay thế ký tự đầu tiên trong mỗi dòng

1 chrX_73833098_73834098 
    1 chrX_73889652_73890652 
    1 chrX_91194501_91195501 
    1 chrX_92000157_92001157 
    1 chrX_92106500_92107500 

Tôi muốn thay thế ký tự đầu tiên "1" thành 0. Wanted ra là:

0 chrX_73833098_73834098 
    0 chrX_73889652_73890652 
    0 chrX_91194501_91195501 
    0 chrX_92000157_92001157 
    0 chrX_92106500_92107500 

Đang cố gắng để làm điều đó với điều này:

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

Nhưng đầu ra là:

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 

Tôi tin rằng có cách dễ dàng để sửa chữa nó, nhưng tôi không biết điều đó.

+2

Bạn có 'khoảng trống trắng' ở đầu mỗi dòng. – kev

Trả lời

12

Có ký tự khoảng trắng khi cầu xin mỗi dòng.

bạn có thể thử:

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

\ s - phù hợp với nhân vật không gian trắng

đầu ra:

0 chrX_73833098_73834098 
0 chrX_73889652_73890652 
0 chrX_91194501_91195501 
0 chrX_92000157_92001157 
0 chrX_92106500_92107500 

nếu bạn muốn giữ ký tự khoảng trắng:

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

Tôi al vì vậy đã thay thế ở đây. với 1

+1

Bạn không cần phải neo mẫu ở đầu dòng: chỉ cần sử dụng 'sed' s/[[: digit:]]/0/'file' chỉ thay đổi chữ số đầu tiên. Để thay đổi ký tự không dấu cách đầu tiên, 's/[^ [: dấu cách:]]/0 /'. –

3

Tôi nghĩ đây là cách dễ hiểu. Hãy thử:

sed 's/1/0/1' file

đầu ra:

1 chrX_73833098_73834098 
1 chrX_73889652_73890652 
1 chrX_91194501_91195501 
1 chrX_92000157_92001157 
1 chrX_92106500_92107500 

tôi muốn nói rằng 's/partten/partten/g', cuối cùng 'g' có nghĩa là diễn ra trong một dòng.
'1' có nghĩa là lần xuất hiện đầu tiên, 'g' có nghĩa là tất cả, bạn cũng có thể sử dụng '2g' có nghĩa là từ giây đến cuối.
Hãy thử.

+0

Thực sự thích điều này, đến đây một lần nữa chỉ để nhận ra tôi đã bình chọn – DomTomCat

Các vấn đề liên quan