最初の行でのみ操作を実行するにはどうすればよいですか?

最初の行でのみ操作を実行するにはどうすればよいですか?
sed 's/.\(.*\)/\1/' myfile

私のファイルに次のものが含まれているとしましょう。

abc
def
ghi

最初の行の最初の文字だけを削除したいのですが、上記はすべての行からその文字を削除します。

答え1

おそらくsed '1s/.\(.*\)/\1/' myfile

答え2

awkを使用することもできます。awk 'NR==1 {sub(/./,"")} 1'

答え3

tailで読むことができますバイトオフセットなので、ファイルはシングルバイト文字(通常UTF-8 ASCII)大丈夫でしょう。

あなたにとって重要かどうかは状況によって異なりますが、tailそれより速いです。おそらくなぜならsedsed各行は個別に処理する必要がありますが...最初の行が発生する可能性がある場所では使用しないでください。特徴複数バイトを使用してください。

tail -c +2 "file"  

~からman tail

-c, --bytes=N 最後の N バイトを出力するか、+N を使用して各ファイルから始まる N 番目のバイトを出力します。

関連情報