bash替换每行中的第一个字符

时间:2012-04-13 11:47:33

标签: bash sed

我的文件如下:

  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 个答案:

答案 0 :(得分:13)

每条线的乞讨都有空白字符。

你可以尝试:

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

我也在这里取代了。用1

答案 1 :(得分:7)

我认为这是一种易于理解的方式。 尝试:

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',最后一个''意思是一条线的位置。
' 1'意思是第一个匹配,' g'意味着所有,也可以使用' 2g'这意味着从第二个到最后一个 试一试。