【问题标题】:bash substitute first character in every linebash 替换每一行的第一个字符
【发布时间】:2012-04-25 18:44:54
【问题描述】:

我的文件如下所示:

  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

我相信有简单的方法可以解决它,但我不知道。

【问题讨论】:

  • 每行开头都有white-spaces

标签: bash sed


【解决方案1】:

每行的开头都有空格。

你可以试试:

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

【讨论】:

  • 您不需要将模式锚定在行首:只需使用仅更改第一个数字的sed 's/[[:digit:]]/0/' file。要更改第一个非空格字符,s/[^[:space:]]/0/
【解决方案2】:

我认为这是一种容易理解的方法。 试试:

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”表示从第二个到最后一个。
试一试。

【讨论】:

  • 真的很喜欢这个,又来这里才发现我已经投了票
猜你喜欢
  • 2021-06-12
  • 2019-04-27
  • 2015-03-28
  • 2014-08-04
  • 2017-07-23
  • 2011-08-21
  • 1970-01-01
  • 2018-09-21
  • 2017-08-02
相关资源
最近更新 更多