ドットの後のすべてを削除し、同じファイルに上書きします

ドットの後のすべてを削除し、同じファイルに上書きします

ファイルの内容は以下のようになります

abc.w.f.com
asdff.d.f.com
..........

ドットの後のすべてを削除し、変更は同じファイルに上書きする必要があります

abc
asdff

以下を試しましたが、別のファイルへのリダイレクトが必要になり、それは望ましくありません

sed "s/\..*//" Filename  > File2

答え1

使用-i

sed -i 's/\..*$//' Filename

-i[サフィックス], --in-place[=サフィックス]
ファイルをその場で編集します(SUFFIX が指定されている場合はバックアップを作成します)

答え2

同じファイルにリダイレクトすることはできません。 の明らかな問題は、 がファイルを読み取る前に、sed "s/\..*//" Filename > Filenameシェルが書き込み用に開かれ (上書きされ) てしまうことです。Filenamesed

出力を別のファイルにリダイレクトし、元のファイルを削除して、新しく作成したファイルの名前を元のファイルと同じ名前に変更する必要があります。Sed、Perl、AWK でこれを実行できます。

  • sed -i
  • perl -i
  • awk -i inplace

あるいは、以下を使用することもできますsponge:

  • sed "s/\..*//" Filename | sponge Filename

sponge標準入力から受信した内容をバッファリングし続け、その後に書き込みますFilename

関連情報