如何删除文件中所有字符串的第一个字符

如何删除文件中所有字符串的第一个字符

如果这是零,如何删除文件中所有字符串的第一个字符?

例如

我有文件

$ cat file

01111111  01222222 6666066
09999011  02222044 0743333
01000000  30000000 2222220

尝试使用 sed 命令输出:

$ sed 's/^0*\(.*\)/\1/' file

1111111  01222222 6666066
9999011  02222044 0743333
1000000  30000000 2222220

但这只会擦除第一列的零。

如何删除文件中第一个字符的所有零,例如输出:

1111111   1222222 6666066
9999011   2222044  743333
1000000  30000000 2222220

答案1

可以合理地假设文本中的字符串由空格分隔。如果是这样,则需要删除前面有空格的零:

sed 's/\([[:space:]]\)0/\1/g'

\(...\)构造保存了零之前的空格,并且\1替换中调用了已保存的文本。

然后还要注意前导零:

sed -e 's/\([[:space:]]\)0/\1/g' -e 's/^0//'

顺便说一句,你的例子没有擦除非初始零点,但取代用空白代替。我的解决方案假设擦除。

此外,您替换前导零的解决方案实际上替换了整个前导零序列。但是,您的问题要求第一的零将被抹去。这就是我的解决方案。

答案2

Perl 对于这个很方便:

perl -lape 's/\b(0+)/" " x length($1)/ge' file
 1111111   1222222 6666066
 9999011   2222044  743333
 1000000  30000000 2222220

或者,在 awk 中等效

awk '{while (1) if (gsub(/\<0/, " ", $0) == 0) break; print}' file

这两者都会将“0”或“00”(作为独立的单词)变成空格。

如果你有

$ cat file
01111111  01222222 6666066
09999011  02222044 0743333
01000000  30000000 2222220
00000007  00000009 0000000

然后,为了保留最后一行的零值,您可以:

$ perl -lape 's/\b(0+)(\d)/" " x length($1) . $2/ge' file
 1111111   1222222 6666066
 9999011   2222044  743333
 1000000  30000000 2222220
       7         9       0

相关内容