如何刪除檔案中所有字串的第一個字符

如何刪除檔案中所有字串的第一個字符

如果為零,如何刪除檔案中所有字串的第一個字元?

例如

我有文件

$ 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

相關內容