これがゼロの場合、ファイル内のすべての文字列の最初の文字を消去するにはどうすればよいですか?
例えば
ファイルがあります
$ 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