ファイルから最後の行を削除する


44

sed 特定の位置の行をすばやく削除するために使用します

sed '1d'
sed '5d'

しかし、ファイルの最後の行を削除したいのに行数がわからない場合はどうすればよいでしょうか(使用wcしていくつかのトリックを取得できることはわかっています)。

現在、回避策を使用しheadtail組み合わせて使用wcしています。ここで簡単なねじれはありますか?


どのOS?いくつかのフレーバーはのための興味深いオプションがありますheadし、tail...
ニルス

@Nils私は「Red Hat Enterprise Linux Serverリリース5.5(Tikanga)」を使用しています。あなたがするためのオプションのためにポイントすることができますheadし、tailあなたは別の味のを知っていますか?
mtk

やった。下記参照。
ニルス

回答:


88

sed $は最後の行なので、最後の行を削除するには:

sed '$d' <file>

12
sed -i '$d' <file>ファイルをその場で編集するために使用します。
WanderingMind

1
最後のn行(nは任意の整数)を削除するとどうなりますか?
ジョシュアサラザール

31

最後の行の$:

sed '$d' file

9
あなたを30秒倒します:P
h3rrmiller

1
悲しいことに、たとえば最後の2行を削除するには、より複雑な手法を使用する必要があります。
-dubiousjim

どういう意味ですか?sed '$d' file; sed '$d' file
ロブ

3
@Rob:sed '$d' file実際にはファイルを変更しません。最後の行を除いて、ファイルの内容を出力するだけです。そのsed '$d' file; sed '$d' fileため、ファイルの内容を2回印刷し、そのたびに最後の行を削除します。の最後の2行の削除sed '$d' fileはに相当しますsed '$d' file | sed '$d'
-ruakh

2
ええ、それはエレガントではありませんが、もちろんうまくいきます。で1パスでやりますsed -n '1{h;n;}; $q; x; p;'。私たちにできることはできないとふざけていたsed '$-1,$d'
dubiousjim

14

cat file.txt | head -n -1 > new_file.txt

最後の行に依存し、それはそう、注意してくださいfile.txt(これはで終わる場合EOF、又は\n、その後EOF)のライン数は、new_file.txt(同じであってもよいfile.txt(何がある場合、これは起こりません。このコマンドの後に)\n、いずれの場合に- )最後の行の内容が削除されます。

また、2番目の(中間)ファイルを使用する必要があることに注意してください。猫と同じファイルにリダイレクトする場合、それを消去します。


6
これが機能する場合は、単純な場合もありますhead -n -1 file.txt > new_file.txt。ただし、負のカウントhead -nは、の一部の実装でのみ使用できますhead。たとえば、FreeBSDやBusyBoxバージョンでは動作しませんhead
-dubiousjim

1
@dubiousjim:同意しhead -n -1 file.txt > new_file.txtました。2つのコメント(同じ行数、および同じファイルで消去)に関しては同じように機能します。否定的な議論に関しては、そのような違いはUnix間で時々発生し、あなたはそれが完全に同じコマンドであると期待するので、しばしばイライラします(そしてなぜあなたはそうしないだろう-同じ名前と目的!)-とにかく、良いポイント。(私はDebianを使用しています。)
エマニュエルベルク

5

head --lines=-1。SLES11SP2-system(coreutils-8.12-6.23.1)のheadのマンページで最初にこの可能性に出くわしました

tailそして、headの一部であるcoreutils(少なくともRPMベース・システムの場合)-rpm。

coreutilsの変更ログによると、この構文はcoreutils-version 5.0.1以降でサポートされています

悪いニュース:RH5​​-manページによると、このオプションは説明されていません

朗報:RH5で動作します(したがって、少なくとも現在のバージョンのRH5で動作します)。

rpm -q coreutils CentOS 5.8で)を表示:coreutils-5.97-34.el5_8.1

RH5.5かどうかはわかりません。既にそれをサポートするcoreutils-versionがあります。しかし、とにかく5.5は廃止されました。


+1。RH5.5では完全に機能します。ありがとう。
mtk

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.