2012-04-13 57 views
6

我的文件是這樣的:的bash替換第一個字符中的每一行

1 chrX_73833098_73834098 
    1 chrX_73889652_73890652 
    1 chrX_91194501_91195501 
    1 chrX_92000157_92001157 
    1 chrX_92106500_92107500 

我要替換的第一個字符「1」到0通緝輸出是:

0 chrX_73833098_73834098 
    0 chrX_73889652_73890652 
    0 chrX_91194501_91195501 
    0 chrX_92000157_92001157 
    0 chrX_92106500_92107500 

試圖做到這一點與此:

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

但輸出是:

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 

我相信有簡單的方法來解決它,但我不知道它。

+2

你在每行的開頭都有'white-spaces'。 – kev 2012-04-13 12:09:45

回答

12

在每行的乞討處有空格字符。

你可以試試:

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

\ S - 匹配空格字符

輸出:

0 chrX_73833098_73834098 
0 chrX_73889652_73890652 
0 chrX_91194501_91195501 
0 chrX_92000157_92001157 
0 chrX_92106500_92107500 

,如果你想保留空白字符:

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

我al所以在這裏取代了。與1

+1

您不需要在該行的開始處固定模式:只需使用僅改變第一個數字的sed's/[[:digit:]]/0 /'文件。要改變第一個非空格字符's/[^ [:space:]]/0 /'。 – 2012-04-13 13:23:21

3

我認爲這是一種理解的簡單方法。 嘗試:

sed 's/1/0/1' file

輸出:

1 chrX_73833098_73834098 
1 chrX_73889652_73890652 
1 chrX_91194501_91195501 
1 chrX_92000157_92001157 
1 chrX_92106500_92107500 

我想說的是, 'S/partten/partten/G',最後的 'G' 的意思是在一條線上的地方。
'1'表示第一個匹配,'g'表示全部,也可以使用'2g',意思是從頭到尾。
試試看。

+0

真的很喜歡這個,來到這裏再次意識到我已經投票了 – DomTomCat 2017-12-04 11:43:11

相關問題