ファイル内のすべての文字列の最初の文字を消去するにはどうすればいいですか

ファイル内のすべての文字列の最初の文字を消去するにはどうすればいいですか

これがゼロの場合、ファイル内のすべての文字列の最初の文字を消去するにはどうすればよいですか?

例えば

ファイルがあります

$ 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

関連情報