如果為零,如何刪除檔案中所有字串的第一個字元?
例如
我有文件
$ 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